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中xrange用法分析
Apr 15 Python
python Flask实现restful api service
Dec 04 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
Python的argparse库使用详解
Oct 09 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Django框架验证码用法实例分析
May 10 Python
Django choices下拉列表绑定实例
Mar 13 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
python 实现图片特效处理
Apr 03 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 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开发GUI
2006/10/09 PHP
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
javascript事件问题
2009/09/05 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python八皇后问题的解决方法
2018/09/27 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python类中super() 的使用解析
2019/12/19 Python
python让函数不返回结果的方法
2020/06/22 Python
Python接收手机短信的代码整理
2020/08/02 Python
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
如何执行一个shell程序
2012/11/23 面试题
专升本学生毕业自我鉴定
2014/10/04 职场文书
2014年派出所工作总结
2014/11/21 职场文书
毕业设计论文评语
2014/12/31 职场文书
宣传委员竞选稿
2015/11/19 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
python库sklearn常用操作
2021/08/23 Python