一、打開京東——》搜索ipad
第一次打開只加載了30個商品,往下拉纔會加載後30個商品,總共60個商品
我們f12打開Network檢查
得到這樣的url:
Request URL:
跟普通的url對比分析
對比參數:
多了幾個參數"&scrolling", "&log_id", "&show_items",我們一個一個嘗試一遍
最終得到能夠訪問的url:
從而尋找規律得到:
"https://search.jd.com/Search?keyword=" + keyword + "&enc=utf-8&qrst=1&rt=1&stop=1&vt=1&stock=1&page=" + str(p) + "&s=" + str(1 + (p - 1) * 30) + "&click=0&scrolling=y"
得到一整頁的商品後,我們的目標是每一個商品的價格和其他,因此我們要得到每一個商品的鏈接
其中一個url:https://item.jd.com/57521237589.html,"57521237589"就是商品的編號
同樣打開f12檢查,並複製其XPath方便我們提取這樣的鏈接
複製得到的XPath://*[@id="J_goodsList"]/ul/li[1]/div/div[1]/a 還需修改一下,把 "li[1]" 的 "[1]" 去掉,不然就只會得到一個商品的鏈接
html = etree.HTML(response.text)
html.xpath('//*[@id="J_goodsList"]/ul/li/div/div[1]/a/@href'):
二、獲取商品參數信息(價格,評論數......)
按f12檢查, 京東的價格是通過js加載的,直接獲取html的<span>是不能的
得到價格信息的url:https://p.3.cn/prices/mgets?skuIds=3575321949, "35753219491"是商品編號
返回是一個json文件,我們寫出如下代碼獲取
jsons = json.loads(response.text[0:-1])
price = jsons[0]['p']
三、獲取商品其他信息並最後寫入csv文件
直接在網頁源代碼html提取就行
寫入csv文件
with open("test.csv", "a", newline="") as csvfile:
rows = ("商品名稱", "商品價格", "商品鏈接")
writer = csv.writer(csvfile)
writer.writerow(rows)
完整代碼參考:
GitHub: https://github.com/Tomy-Enrique/Spider/tree/master/JD_spider
Gitee(碼雲): https://gitee.com/TomyEnrique/Spider/tree/master/JD_spider