作為一個資深吃貨,網購各種零食是很頻繁的,但是能否在浩瀚的商品庫中找到合適的東西,就只能參考評論了!今天給大家分享用python做個抓取淘寶商品評論的小爬蟲!
思路
我們就拿“德州扒雞”做為參考目標吧~!如果想抓其他商品的話,自行更換目標即可!打開淘寶,搜索目標,隨便點擊一個商品進入,在點擊累計評論,打開F12開發者工具——網絡,先清除現有的所有內容,然后點擊下一頁評論,在彈出的內容中查找文件中開頭為list_detail_rate.htm的html類型,如下圖所示
這個html中就含有我們需要的內容,左鍵點擊然后選擇響應,就可以看到具體響應內容了!
這里面是一大串包含我們需要的內容在內的源代碼,如果大家有興趣可以提取內容做成json數據,而我們這里只需要評論數據,所以,用正則匹配評論部分就可以了!
開始寫代碼
具體過程就贅述了,新建一個函數,接受店鋪ID(唯一)作為參數,做一個無限循環來翻頁,並以評論時間為判斷是否重復,如果重復則跳出循環(return可以直接跳出循環),整個函數部分代碼如下
1 import requests 2 import re 3 import time 4 5 def get_comment(itemid): 6 i = 1#開始頁碼 7 d = []#構建一個列表用於判斷是否繼續循環 8 lis = []#放置抓取到的內容 9 while i: 10 #構建循環用的url 11 url = 'https://rate.tmall.com/list_detail_rate.htm?itemId={}&order=3&sellerId=1914459560¤tPage={}'.format(itemid,str(i)) 12 html = requests.get(url).text#獲取相關內容的源代碼 13 pl = re.findall(r'"rateContent":"(.*?)","rateDate"',html)#評論抓取 14 dat = re.findall(r'"rateDate":"(.*?)","reply"',html)#評論時間抓取 15 if dat == d or pl ==[]:#判斷是否重復或者是否存在評論 16 print('==============================') 17 return lis #跳出循環並返回值 18 else: 19 try: 20 d = dat#沒有重復則將評論時間賦值給d,用於下次循環判斷 21 except IndexError as e: 22 continue#出現該錯誤則跳出循環,進行下一次 23 print("第%d頁評論"%i,pl)#打印評論內容 24 lis.append(pl) 25 i += 1 26 time.sleep(2)#訪問間隔
加入try是因為代碼一直在抽風的跳出index錯誤,后續還可以改進!
作為一個爬蟲愛好者,必然要加深抓取的廣度的,試着將整個頁面的店鋪ID抓取出來!這次簡單,直接抓到json數據,然后用正則匹配,放回列表,因為時間有限,沒有研究出url翻頁的依據,就只抓取了一頁!
1 def get_id(kw='德州扒雞'): 2 ''' 3 只抓了首頁44家店鋪的,沒有抓后面頁面,后續需改進 4 ''' 5 url = 'https://s.taobao.com/search?data-key=s&data-value=44&ajax=true&' \ 6 '_ksTS=1529811793535_1018&callback=jsonp1019&q={}&imgfile=&js=1&' \ 7 'stats_click=search_radio_all:1&initiative_id=staobaoz_20180624&' \ 8 'ie=utf8&bcoffset=4&p4ppushleft=1,48'.format(kw) 9 html = requests.get(url).text 10 id_list = re.findall(r',"auctionNids":\[(.*?)\],"ifDoufuAuction"',html,re.S)[0] 11 return id_list.replace('"','').split(',')
然后開始寫主函數,保存到文檔!運行結果如下

emmm,看評論是可以入手的!哈哈!
最后
想說幾點,一個是自己寫個小爬蟲玩玩可以,做分析也行,但是務必切記不要外傳擴散,很容易進坑!二是淘寶的反爬其實也不是很難,比如上面的爬蟲,並沒有做反爬措施,大家可以拿這個來練練手,記得加入sleep就可以,不要給對方服務器造成壓力為最好!
代碼寫的不好,各路高手請見諒!歡迎大家來一起交流、學習!
