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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
Python笔记(叁)继续学习
Oct 24 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
python脚本定时发送邮件
Dec 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
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
php实现天干地支计算器示例
2014/03/14 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
vue中添加mp3音频文件的方法
2018/03/02 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python实现决策树
2017/12/21 Python
python实现类之间的方法互相调用
2018/04/29 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
利用python实现逐步回归
2020/02/24 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Flask处理Web表单的实现方法
2021/01/31 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
写给女朋友的道歉信
2014/01/12 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
goland 设置project gopath的操作
2021/05/06 Golang
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python
Redis主从复制操作和配置详情
2022/09/23 Redis