做爲一個資深吃貨,網購各類零食是很頻繁的,可是可否在浩瀚的商品庫中找到合適的東西,就只能參考評論了!今天給你們分享用python作個抓取淘寶商品評論的小爬蟲!html
思路python
咱們就拿「德州扒雞」作爲參考目標吧~!若是想抓其餘商品的話,自行更換目標便可!打開淘寶,搜索目標,隨便點擊一個商品進入,在點擊累計評論,打開F12開發者工具——網絡,先清除現有的全部內容,而後點擊下一頁評論,在彈出的內容中查找文件中開頭爲list_detail_rate.htm的html類型,以下圖所示ajax
這個html中就含有咱們須要的內容,左鍵點擊而後選擇響應,就能夠看到具體響應內容了!json
這裏面是一大串包含咱們須要的內容在內的源代碼,若是你們有興趣能夠提取內容作成json數據,而咱們這裏只須要評論數據,因此,用正則匹配評論部分就能夠了!服務器
具體過程就贅述了,新建一個函數,接受店鋪ID(惟一)做爲參數,作一個無限循環來翻頁,並以評論時間爲判斷是否重複,若是重複則跳出循環(return能夠直接跳出循環),整個函數部分代碼以下網絡
# -*- coding=utf-8 -*- #qq羣:542110741 import requests import re import time def get_comment(itemid): i = 1#開始頁碼 d = []#構建一個列表用於判斷是否繼續循環 lis = []#放置抓取到的內容 while i: #構建循環用的url url = 'https://rate.tmall.com/list_detail_rate.htm?itemId={}&order=3&sellerId=1914459560¤tPage={}'.format(itemid,str(i)) html = requests.get(url).text#獲取相關內容的源代碼 pl = re.findall(r'"rateContent":"(.*?)","rateDate"',html)#評論抓取 dat = re.findall(r'"rateDate":"(.*?)","reply"',html)#評論時間抓取 if dat == d or pl ==[]:#判斷是否重複或者是否存在評論 print('==============================') return lis #跳出循環並返回值 else: try: d = dat#沒有重複則將評論時間賦值給d,用於下次循環判斷 except IndexError as e: continue#出現該錯誤則跳出循環,進行下一次 print("第%d頁評論"%i,pl)#打印評論內容 lis.append(pl) i += 1 time.sleep(2)#訪問間隔
加入try是由於代碼一直在抽風的跳出index錯誤,後續還能夠改進!app
做爲一個爬蟲愛好者,必然要加深抓取的廣度的,試着將整個頁面的店鋪ID抓取出來!此次簡單,直接抓到json數據,而後用正則匹配,放回列表,由於時間有限,沒有研究出url翻頁的依據,就只抓取了一頁!函數
def get_id(kw='德州扒雞'): ''' 只抓了首頁44家店鋪的,沒有抓後面頁面,後續需改進 ''' url = 'https://s.taobao.com/search?data-key=s&data-value=44&ajax=true&' \ '_ksTS=1529811793535_1018&callback=jsonp1019&q={}&imgfile=&js=1&' \ 'stats_click=search_radio_all:1&initiative_id=staobaoz_20180624&' \ 'ie=utf8&bcoffset=4&p4ppushleft=1,48'.format(kw) html = requests.get(url).text id_list = re.findall(r',"auctionNids":\[(.*?)\],"ifDoufuAuction"',html,re.S)[0] return id_list.replace('"','').split(',')
而後開始寫主函數,保存到文檔!運行結果以下工具
emmm,看評論是能夠入手的!哈哈!學習
最後
想說幾點,一個是本身寫個小爬蟲玩玩能夠,作分析也行,可是務必切記不要外傳擴散,很容易進坑!二是淘寶的反爬其實也不是很難,好比上面的爬蟲,並無作反爬措施,你們能夠拿這個來練練手,記得加入sleep就能夠,不要給對方服務器形成壓力爲最好!
代碼寫的很差,各路高手請見諒!歡迎你們來一塊兒交流、學習!