某電商商品屬性獲取分析

爲完成一個小型爬蟲項目,在並未使用該平臺提供的API狀況下,細緻分析了國內某著名電商網站商品屬性的獲取思路和方法,茲此記錄分享,學習交流。javascript

靜態頁面部分

爲了獲取靜態頁面部分的內容,須要使用firefox的開發者功能禁用javascript,如圖
firefox設置
勾選"Disable JavaScript"。刷新頁面後可見。經過靜態頁面可獲取標題,商品ID,分類號,商品URL,圖片url等內容。可直接使用正則表達式或xpath等工具分析得到,這裏再也不贅述。java

動態內容部分

該網站大部分商品屬性都是經過ajax動態獲取的。仍是經過瀏覽器來分析。取消勾選"Disable JavaScript"後,使用"Network"工具可對服務器響應的包進行抓包和分類。爲避免反覆從新加載頁面時緩存的影響,勾選"Disable Cache"選項。先打開"Network"界面,而後刷新頁面,可得到加載過程的抓包內容。ajax請求返回的數據爲json或js類型。例如:
某json數據
url爲python

http://p.3.cn/prices/get?callback=cnp&type=1&area=1_72_4137&pdtk=&pduid=1516989398&pdpin=&pdbp=0&skuid=J_1743187

可在network工具箱內查看其response內容爲
圖片描述
對照頁面內容後發現其中p字段正是商品價格數據!
經過直接打開連接獲得json串爲ajax

cnp([{"id":"J_1743187","p":"499.00","m":"549.00"}]);

此response中帶有回調函數名"cnp",觀察在url中也有一個相同字段。遂嘗試在url中去掉該字段,從新請求後正則表達式

http://p.3.cn/prices/get?type=1&area=1_72_4137&pduid=1516989398&pdbp=0&skuid=J_1743187

得到json:json

[{"id":"J_1743187","p":"499.00","m":"549.00"}]

繼續嘗試刪除請求中的get參數,最終發現可用瀏覽器

http://p.3.cn/prices/mgets?skuids=J_1743187

正常獲取到相同的數據。
python解析代碼:緩存

import urllib2
import json

p=urllib2.urlopen('http://p.3.cn/prices/get?type=1&area=1_72_4137&pduid=1516989398&pdbp=0&skuid=J_1743187').read()
p_json=json.loads(p)
price=p_json['p']

獲取到價格數據,方便了自動化生成。其他不能經過靜態內容獲取的屬性都可類比分析嘗試得到。服務器

相關文章
相關標籤/搜索