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 相关文章推荐
python中二维阵列的变换实例
Oct 09 Python
Python数据类型详解(二)列表
May 08 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
Django框架封装外部函数示例
May 28 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
python列表的逆序遍历实现
Apr 20 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
Python错误的处理方法
Jun 23 Python
Python通过队列来实现进程间通信的示例
Oct 14 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
Yii学习总结之安装配置
2015/02/22 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
php中smarty区域循环的方法
2015/06/11 PHP
php HTML无刷新提交表单
2016/04/05 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php7下的filesize函数
2019/09/30 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
Python中使用Inotify监控文件实例
2015/02/14 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
主管竞聘书范文
2014/03/31 职场文书
班组长竞聘书
2014/03/31 职场文书
授权委托书怎么写
2014/04/03 职场文书
班主任新年寄语
2014/04/04 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
致运动员的广播稿
2015/08/19 职场文书
Python何绘制带有背景色块的折线图
2022/04/23 Python