Python爬蟲——實戰一:爬取京東產品價格(逆向工程方法)
阿新 • • 發佈:2019-02-09
在京東的單個產品頁面上,通過檢視原始碼檢查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")
這個就是針對價格請求返回的響應頁面,其中”p”表示的就是商品的價格。
如何知道上面的URL中有價格資訊呢?
在火狐瀏覽器中安裝了Firebug。右鍵點選商品價格,選擇“使用Firebug檢視元素”,可以看到開啟的“HTML”中包含了價格資訊。這是因為Firebug的”HTML”顯示的是動態載入完所有資料後的原始碼。
現在選擇Firebug的“網路”,然後重新整理當前商品頁面。然後選擇“全部”,在“域”欄找到p.3.cn,該行對應的就是價格請求。
實際中遇到的問題
2017.8.22
在多次執行爬蟲之後,價格頁面返回的是
{"error":"pdos_captcha"}
採用渲染引擎方法。