python根据京东商品url获取产品价格
admin
2023-07-31 02:35:51
0

京东商品详细的请求处理,是先显示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)

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...