京东商品详细的请求处理,是先显示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 urllibimport Jsonimport 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()
再给大家分享一个京东价格的爬虫:
fromcreepyimportCrawlerfromBeautifulSoupimportBeautifulSoupimporturllib2importJsonclassMyCrawler(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:printesoup=BeautifulSoup(doc.text)printsoup.find(ID="product-intro").div.h1.texturl_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:passcrawler=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根据京东商品url获取产品价格全部内容,希望文章能够帮你解决python根据京东商品url获取产品价格所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)