python根据京东商品url获取产品价格


Posted in Python onAugust 09, 2015

京东商品详细的请求处理,是先显示html,然后再ajax请求处理显示价格。
1.可以运行js,并解析之后得到的html
2.模拟js请求,得到价格

# -*- coding: utf-8 -*-
"""
根据京东url地址,获取商品价格
京东请求处理过程,先显示html页面,然后通过ajax get请求获取相应的商品价格
 
1.商品的具体数据在html中的格式,如下(示例)
# product: {
#     skuid: 1310118868,
#     name: '\u9999\u5f71\u77ed\u88d9\u4e24\u4ef6\u5957\u88c5\u5973\u0032\u0030\u0031\u0034\u51ac\u88c5\u65b0\u6b3e\u97e9\u7248\u957f\u8896\u0054\u6064\u4e0a\u8863\u8377\u53f6\u8fb9\u534a\u8eab\u88d9\u6f6e\u0020\u85cf\u9752\u0020\u004d',
#     skuidkey:'7781F505B71CE37A3AFBADA119D3587F',
#     href: 'http://item.jd.com/1310118868.html',
#     src: 'jfs/t385/197/414081450/336886/3070537b/541be890N2995990c.jpg',
#     cat: [1315,1343,1355],
#     brand: 18247,
#     nBrand: 18247,
#     tips: false,
#     type: 2,
#     venderId:38824,
#     shopId:'36786',
#     TJ:'0',
#     specialAttrs:["is7ToReturn-1"],
#     videoPath:'',
#     HM:'0'
#   }
 
2.ajax请求代码如下:
# // 获得数字价格
# var getPriceNum = function(skus, $wrap, perfix, callback) {
#   skus = typeof skus === 'string' ? [skus]: skus;
#   $wrap = $wrap || $('body');
#   perfix = perfix || 'J-p-';
#   $.ajax({
#     url: 'http://p.3.cn/prices/mgets?skuIds=J_' + skus.join(',J_') + '&type=1',
#     dataType: 'jsonp',
#     success: function (r) {
#       if (!r && !r.length) {
#         return false;
#       }
#       for (var i = 0; i < r.length; i++) {
#         var sku = r[i].id.replace('J_', '');
#         var price = parseFloat(r[i].p, 10);
#
#         if (price > 0) {
#           $wrap.find('.'+ perfix + sku).html('¥' + r[i].p + '');
#         } else {
#           $wrap.find('.'+ perfix + sku).html('暂无报价');
#         }
#
#         if ( typeof callback === 'function' ) {
#           callback(sku, price, r);
#         }
#       }
#     }
#   });
# };
"""
import urllib
import json
import re
 
 
class JdPrice(object):
  """
  对获取京东商品价格进行简单封装
  """
  def __init__(self, url):
    self.url = url
    self._response = urllib.urlopen(self.url)
    self.html = self._response.read()
 
  def get_product(self):
    """
    获取html中,商品的描述(未对数据进行详细处理,粗略的返回str类型)
    :return:
    """
    product_re = re.compile(r'compatible: true,(.*?)};', re.S)
    product_info = re.findall(product_re, self.html)[0]
    return product_info
 
  def get_product_skuid(self):
    """
    通过获取的商品信息,获取商品的skuid
    :return:
    """
    product_info = self.get_product()
    skuid_re = re.compile(r'skuid: (.*?),')
    skuid = re.findall(skuid_re, product_info)[0]
    return skuid
 
  def get_product_name(self):
    pass
 
  def get_product_price(self):
    """
    根据商品的skuid信息,请求获得商品price
    :return:
    """
    price = None
    skuid = self.get_product_skuid()
    url = 'http://p.3.cn/prices/mgets?skuIds=J_' + skuid + '&type=1'
    price_json = json.load(urllib.urlopen(url))[0]
    if price_json['p']:
      price = price_json['p']
    return price
 
 
# 测试代码
if __name__ == '__main__':
  url = 'http://item.jd.com/1310118868.html'
  url = 'http://item.jd.com/1044773.html'
  jp = JdPrice(url)
  print jp.get_product_price()
 
 
# htm.decode('gb2312', 'ignore').encode('utf-8')
# f = open('jjs.html', 'w')
# f.write(htm)
# f.close()

再给大家分享一个京东价格的爬虫:

fromcreepyimportCrawler
fromBeautifulSoupimportBeautifulSoup
importurllib2
importjson

classMyCrawler(Crawler):
defprocess_document(self,doc):
ifdoc.status==200:
print[%d]%s%(doc.status,doc.url)
try:
soup=BeautifulSoup(doc.text.decode(gb18030).encode(utf-8))
exceptExceptionase:
printe
soup=BeautifulSoup(doc.text)
printsoup.find(id="product-intro").div.h1.text
url_id=urllib2.unquote(doc.url).decode(utf8).split(/)[-1].split(.)[0]
f=urllib2.urlopen(http://p.3.cn/prices/get?skuid=J_+url_id,timeout=5)
price=json.loads(f.read())
f.close()
printprice[0][p]
else:
pass

crawler=MyCrawler()
crawler.set_follow_mode(Crawler.F_SAME_HOST)
crawler.set_concurrency_level(16)
crawler.add_url_filter(.(jpg|jpeg|gif|png|js|css|swf)$)
crawler.crawl(http://item.jd.com/982040.html)
Python 相关文章推荐
Pycharm学习教程(3) 代码运行调试
May 03 Python
python放大图片和画方格实现算法
Mar 30 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
对python中dict和json的区别详解
Dec 18 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
Python 脚本的三种执行方式小结
Dec 21 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
Python 绘制多因子柱状图
May 11 Python
python制作一个桌面便签软件
Aug 09 #Python
Python 实现简单的电话本功能
Aug 09 #Python
python批量提取word内信息
Aug 09 #Python
python实现下载指定网址所有图片的方法
Aug 08 #Python
Python实现多线程抓取妹子图
Aug 08 #Python
通过Python来使用七牛云存储的方法详解
Aug 07 #Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 #Python
You might like
php 时间计算问题小结
2009/01/04 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python @property的用法及含义全面解析
2018/02/01 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
使用Python实现牛顿法求极值
2020/02/10 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
Python进行特征提取的示例代码
2020/10/15 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
写好自荐信的几个要点
2013/12/26 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
小学生手册家长评语
2014/04/16 职场文书
健康家庭事迹材料
2014/05/02 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
Redis特殊数据类型bitmap位图
2022/06/01 Redis