在京东的单个产品页面上,通过查看源码检查html,可以看到
<span class="p-price"><span>¥</span><span class="price J-p-1279836"></span></span>
这里没有直接给出价格。
这是因为价格数据是通过JS动态加载的,而HTML源码中并不包含动态加载的页面内容。
获取京东商品的价格
#-*- coding:utf-8 -*-
import urllib2
import json
def jd_price(url):
sku = url.split('/')[-1].strip(".html")
print sku
price_url = "https://p.3.cn/prices/mgets?skuIds=J_" + sku
response = urllib2.urlopen(price_url)
content = response.read()
result = json.loads(content)
print result
record = result[0]
#print "price:", record['p']
return record['p']
if __name__=="__main__":
jd_price("https://item.jd.com/12419422058.html")
上述代码的关键在于https://p.3.cn/prices/mgets?skuIds=J_12419422058” ,打开这个链接,可以看到:
这个就是针对价格请求返回的响应页面,其中”p”表示的就是商品的价格。
如何知道上面的URL中有价格信息呢?
在火狐浏览器中安装了Firebug。右键点击商品价格,选择“使用Firebug查看元素”,可以看到打开的“HTML”中包含了价格信息。这是因为Firebug的”HTML”显示的是动态加载完所有数据后的源码。
现在选择Firebug的“网络”,然后刷新当前商品页面。然后选择“全部”,在“域”栏找到p.3.cn,该行对应的就是价格请求。
实际中遇到的问题
2017.8.22
在多次运行爬虫之后,价格页面返回的是
{"error":"pdos_captcha"}
采用渲染引擎方法。