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中self原理实例分析
Apr 30 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Python如何实现机器人聊天
Sep 10 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
PHP获取音频文件的相关信息
2015/06/22 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
Python3实现Web网页图片下载
2016/01/28 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
解决django FileFIELD的编码问题
2020/03/30 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
综合办公室主任职责
2013/12/16 职场文书
认识深刻的检讨书
2014/02/16 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
辩论赛主持词
2014/03/18 职场文书
酒店开业策划方案
2014/06/02 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
初中英语教学随笔
2015/08/15 职场文书