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使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python实现反转部分单向链表
Sep 27 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
python为什么会环境变量设置不成功
Jun 23 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
Python合并pdf文件的工具
Jul 01 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实现监控varnish缓存服务器的状态
2014/12/30 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
js选项卡的制作方法
2017/01/23 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
layui表格数据重载
2019/07/27 Javascript
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
matplotlib实现区域颜色填充
2019/03/18 Python
详解Django 时间与时区设置问题
2019/07/23 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python遍历字典方式就实例详解
2019/12/28 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
学习方法演讲稿
2014/05/10 职场文书
卖车协议书范例
2014/09/16 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
python基础之类属性和实例属性
2021/10/24 Python
无线电通信名词解释
2022/02/18 无线电
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python