京東商品評論太多(帶你一鍵爬取京東商品評論)
一、項目說明

1.項目背景
一天,一朋友扔給我一個鏈接s://item.jd.com/.html,讓我看看這個歌商品的所有評論怎么抓取,我打開一看,好家伙,竟然有近300萬條評論,不是一個小數目啊。
京東某商品評論
但是仔細一看,原來有234萬+的評論是默認好評,還是有少部分是有價值的評價的。
經過進一步觀察,可以看到
商品評論翻頁
顯然,網頁中顯示的只有100頁數據,每頁顯示10條,通常可以用selenium點擊每一頁然后獲取,但是這樣效率是不是太低了呢?還是直接用requests來得更直接,很多情況下網頁顯示的數據是請求得到的JSON數據在網頁上渲染而顯示出來的,京東的評論會不會也是這樣呢?好,說干就干!!!
2.項目環境
這個小項目使用Python爬取,不需要太多的配置,只需要安裝requests庫就足夠,我相信對于很多玩爬蟲的小伙伴來說這個庫肯定是必備的,沒裝requests不要告訴我你會爬蟲。
二、項目實施
1.項目分析
上面說到,網頁中的數據很多都是通過渲染請求到的JSON數據得到的,那么我們就來看看京東是不是也是這樣的。利用瀏覽器的審計工具,選擇Network欄,可以看到
商品評論總體概況
仔細查看,尋找鏈接中于評論(comment)有關的鏈接,可以找到其中的一個請求鏈接s://club.jd.com/comment/productCommentSummaries.action?referenceIds=&callback=jQuery1951081&_=,如上圖。這是關于該商品評論的整體情況的,可以看到具體的總評論數、默認好評數、好評數、好評率等,雖然不是我們想要的,但是也近了一步,繼續尋找,又找到了一條帶comment字眼的鏈接s://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1,如圖
評論詳情概覽
后邊有10條評論,應該就是該商品對應的第一頁評論了,點開查看,如下:
評論數據詳情
對比網頁中顯示的評論可以看到,這就就是我們要找的東西。
由于得到的數據不是標準格式的JSON,所以我選擇使用正則表達式來獲取相關的內容。
現在還有一個問題,我們只獲得了1頁評論,那怎么獲取所有的評論呢?會不會秘密隱藏在鏈接中呢?
對于鏈接s://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1,顯然有很多參數,不難找到,有參數productId和page,假如猜得不錯,應該是商品id和評論頁數(從0開始),這時,換一個商品id,那么商品id怎么獲得呢?舉個例子,在鏈接s://item.jd.com/.html中,商品id就是。另找一個商品,將其商品id替換掉評論鏈接中的productId,獲得的正是該商品的第一頁評論。現在嘗試翻頁,逐漸增大page參數的值,如1、2、3…,也能獲取到對應頁的評論數據。
現在分析工作已經做的差不多了,可以開始碼代碼了。
2.代碼實現
導入模塊和定義常量
import?reimport?timeimport?csvimport?osimport?requestsimport?html#?設置請求頭headers?=?{'cookie':?'shshshfp=22ddd21be92463ffa35684d;?shshshfpa=ab283f84-c40f-9710-db89-84a8d3366a81-;?__jda=.....1;?__jdv=|direct|-|none|-|;?__jdc=;?shshshfpb=bUe7tI9%2FOOaJKd7vP0EtSOg%3D%3D;?__jdu=;?areaId=22;?ipLoc-djd=22-1977-1980-0;?3AB9D23F7A4B3C9B=7XEQD4BFTGEH44EK7LN7HLFCHJW6W2NS5VJOQOCHABZVI7LXJJIW3K2IX5MTPZ4TBERBLY6TRQR5CA3S3IYVLQ2JGI;?jwotest_product=99;?shshshsID=a7457cee6a4a9fa285fe2cff44c6bd17_4_;?__jdb=.4.|1.;?JSESSIONID=8C21549A613B83F0CB86EF1F38FD63D3.s1','sec-fetch-dest':?'document','sec-fetch-mode':?'navigate','sec-fetch-site':?'none','sec-fetch-user':?'?1','upgrade-insecure-requests':?'1','User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/80.0.3987.162?Safari/537.36'}
導入需要使用到的模塊,并且定義請求頭用于請求,減少被反爬的概率。
下一篇:京東直播不為帶貨而帶貨
文章地址:http://www.meyanliao.com/article/online/10765.html