Python爬虫——实战一:爬取京东产品价格(逆向工程方法)

在京东的单个产品页面上,通过查看源码检查html,可以看到

这里没有直接给出价格。

这是因为价格数据是通过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” ,打开这个链接,可以看到:

Python爬虫——实战一:爬取京东产品价格(逆向工程方法)_第1张图片

这个就是针对价格请求返回的响应页面,其中”p”表示的就是商品的价格。

如何知道上面的URL中有价格信息呢?

在火狐浏览器中安装了Firebug。右键点击商品价格,选择“使用Firebug查看元素”,可以看到打开的“HTML”中包含了价格信息。这是因为Firebug的”HTML”显示的是动态加载完所有数据后的源码。

现在选择Firebug的“网络”,然后刷新当前商品页面。然后选择“全部”,在“域”栏找到p.3.cn,该行对应的就是价格请求。

实际中遇到的问题

2017.8.22
在多次运行爬虫之后,价格页面返回的是

{"error":"pdos_captcha"}

采用渲染引擎方法。

你可能感兴趣的:(编程语言Python)