Python爬蟲——實戰一:爬取京東產品價格(逆向工程方法)

Vic時代發表於2017-08-15

在京東的單個產品頁面上,通過檢視原始碼檢查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"}

採用渲染引擎方法。

相關文章