python根据京东商品url获取产品价格

作者:hebedich 时间:2022-01-26 12:14:31 

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

猜你喜欢

  • thinkphp(php)插件钩子(hooks)分析的简单实现机制

    2023-05-25 09:27:58
  • sql自动增长标识导致导入数据问题的解决方法

    2023-07-04 04:39:22
  • 解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题

    2022-10-24 05:34:54
  • js 数值项目的格式化函数代码

    2023-07-14 16:51:31
  • IE6终极备忘单——策略

    2010-01-13 13:05:00
  • 巧用特殊的空格字符

    2009-04-10 18:32:00
  • 利用Python求解阿基米德分牛问题

    2023-11-10 09:36:48
  • ASP编写计数器的优化方法

    2009-01-21 19:46:00
  • Date()与new Date()的区别

    2008-09-29 11:09:00
  • Python3 无重复字符的最长子串的实现

    2021-12-09 21:36:24
  • VS 2010 Ultimate架构代码探索

    2010-05-02 20:38:00
  • 一个用Ajax做的用户名验证程序

    2007-10-21 20:40:00
  • Golang详细讲解常用Http库及Gin框架的应用

    2023-08-25 23:14:41
  • python私有属性和方法实例分析

    2023-11-21 06:16:13
  • PHP结构型模式之外观模式

    2023-05-25 11:43:14
  • php去掉数组的第一个值的两个函数:array_shift、array_splice

    2023-05-29 02:26:07
  • PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数

    2023-11-19 07:25:14
  • Pandas:DataFrame对象的基础操作方法

    2023-07-20 16:13:19
  • 现代Python编程的四个关键点你知道几个

    2023-11-22 02:17:42
  • 轻松掌握SQL Server数据库的六个实用技巧

    2009-01-15 12:56:00
  • asp之家 网络编程 m.aspxhome.com