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使用百度翻译进行中翻英示例
Apr 14 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
python中查看变量内存地址的方法
May 05 Python
python对象及面向对象技术详解
Jul 19 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
python给微信好友定时推送消息的示例
Feb 20 Python
pandas的排序和排名的具体使用
Jul 31 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
next在python中返回迭代器的实例方法
Dec 15 Python
python中lower函数实现方法及用法讲解
Dec 23 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 SPL标准库中的常用函数介绍
2015/05/11 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
vue+iview实现分页及查询功能
2020/11/17 Vue.js
JavaScript实现表单验证功能
2020/12/09 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
Python3多线程操作简单示例
2018/05/22 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
python 画图 图例自由定义方式
2020/04/17 Python
python如何操作mysql
2020/08/17 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
办公室前台的岗位职责
2013/12/20 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
公司总经理任命书
2014/06/05 职场文书
上党课的心得体会
2014/09/02 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书