在之前利用爬蟲爬取網頁的時候只是用到了html解析,但要獲得大量的評論內容時,只從html頁面解析並不能滿足要求,那么只能直接獲取相關數據
進入京東商品界面,F12打開開發人員工具,打開network
刷新頁面,會發現大量內容出現
點擊評論,查看評論信息,開發人員工具也會隨着增加內容,新增加的內容會在工具中的時間軸動態的出現
可以如上圖在時間軸上划定范圍,減少要查看的內容。
記下來查看內容,選擇符合要求的如
內容的url地址是有一定的規律的:如上面內容的地址
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10337898566&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1
其中score表示用戶評論的分類,0是全部分類,1是差評分類;page代表內容的頁數,等同於頁面上的一頁評論。page最多為99,因為京東頁面前端最多提供100頁的評論,爬蟲能爬取大量的內容是通過修改該參數進行的
接下來就是用爬蟲對內容進行相關的爬取和解析了
from bs4 import BeautifulSoup
import requests
Headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}
def getData(page):
#內容url
url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100014352539&score=1&sortType=5&page='+str(page)+'&pageSize=10&isShadowSku=0&fold=1'
response=requests.get(url=url,headers=Headers,timeout=10)
soup=BeautifulSoup(response.text,'lxml')
#對獲得的頁面字符進行處理,並轉成字典
context=eval(soup.find("p").text.replace("fetchJSON_comment98(","").replace(");","").replace("null","None").replace("false","False").replace("true","True"))
print(type(context))
print(context)
if __name__=='__main__':
for i in range(0,100):
getData(i)
n=random.randint(1,5)
time.sleep(n)
代碼中有將程序循環延時1-5秒的操作是因為京東的反爬,沒有時間延時的話很快就會被封