京东图书详情页的定价无法直接获得,价格由类似http://p.3.cn/prices/mgets
的URL提供。
假设我们需要获取https://item.jd.com/10020908286750.html
的定价。
根据开发者工具可以获取对应的定价的URL为:http://p.3.cn/prices/mgets?type=1&callback=_getSkuPrice&skuIds=J_10020908286750
注意!skuIds=J_10020908286750
和10020908286750.html
的对应关系。
获取到的结果如下图,其中"m":"88.00"为定价。
思路:
(1)根据价格URL获取价格数据
(2)使用正则表达式提取价格数据
注意! 爬虫也要讲道德,爬取频率不要太高,每次请求休眠5秒左右,要不然服务器会主动中断连接。
代码:
In [1]: import re
In [2]: import requests
In [3]: price_url='http://p.3.cn/prices/mgets?type=1&callback=_getSkuPrice&skuIds=J_10020908286750'
In [4]: price_content= requests.get(price_url).content
In [5]: price_content
Out[5]: b'_getSkuPrice([{"p":"48.40","op":"48.40","cbf":"0","id":"J_10020908286750","m":"88.00"}]);\n'
In [6]: price_info=price_content.decode()
In [7]: price_info
Out[7]: '_getSkuPrice([{"p":"48.40","op":"48.40","cbf":"0","id":"J_10020908286750","m":"88.00"}]);\n'
In [8]: price=re.findall(r'm\":\"(.*?)\"', price_info)[0]
In [9]: price
Out[9]: '88.00'