python爬虫入门——爬取淘宝商品评论信息
python爬蟲入門——爬取淘寶商品評論信息
- 關(guān)于爬蟲
- 解決難點(diǎn)
- 代碼部分:
關(guān)于爬蟲
從接觸爬蟲以來,一直都認(rèn)為爬蟲是一個很簡單的東西,至從寫了一個從虎撲論壇下載圖片的簡單爬蟲后就一直沒有進(jìn)行研究。昨天閑來無事就學(xué)習(xí)爬蟲淘寶商品信息結(jié)果發(fā)現(xiàn)有些困難,就想發(fā)個帖子,至少讓我走過的彎路不讓別人走吧
解決難點(diǎn)
在編寫過程中遇到了幾個難點(diǎn),如果覺得遇到問題相同可以參考,不同就不浪費(fèi)大家時間了。
1.和爬取虎撲論壇圖片不同,爬取圖片十分簡單,只要在界面中就可以直接獲取到圖片下載的地址,而淘寶商品評論不同,是通過Ajax(好像是,后續(xù)有時間我會調(diào)查清楚,重新編輯)請求后得到的,我理解就是這個評論需要你點(diǎn)一下,而不是直接肉眼就能看到
2.訪問淘寶商鋪連接,十分惡心。一直返問的是一個登錄連接,而不是我想要的html內(nèi)容,加上header,或者用webdriver都不好用,后來才想到可能是我的header里沒有賬號密碼信息,后來添加上cookie,才搞定
3.我本意是想寫到CSV文件中,萬一以后可以用到就不需要再爬取了,結(jié)果商品評論中會有?這種可愛的表情,寫到時候就一點(diǎn)不可愛,導(dǎo)致一直報 ‘UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\U0001f604’ in position 12: illegal multibyte sequence’,后來明白原來是編碼格式問題,調(diào)查后對編碼格式也進(jìn)一步了解
4.在測試過程中,由于一直調(diào)試會一直對頁面發(fā)送請求,請求次數(shù)過多過頻繁,淘寶就會彈出一個拖拽驗(yàn)證碼,我又不想入新坑,就導(dǎo)致我調(diào)試一會休息一會,效率低下。
5.廢話不說,還是直接代碼吧,注釋很多,不理解的可以私下探討
代碼部分:
#爬取淘寶商品信息,真的惡心,搞了一天 import requests import simplejson import json import csv import timebase_url ='https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&callback=jsonp698' header = {'Connection': 'keep-alive','Cookie':此處寫你自己瀏覽器的cookie'}for i in range(1,20,1):url = base_url + '¤tPage=%s'% str(i)# 將響應(yīng)內(nèi)容的文本取出tb_req = requests.get(url, headers=header).text[11:-1]#print(tb_req)#將str格式的文本格式化為字典print(tb_req)tb_dict = simplejson.loads(tb_req)#編碼: 將字典內(nèi)容轉(zhuǎn)化為json格式對象tb_json = json.dumps(tb_dict, indent=2) #indent參數(shù)為縮緊,這樣打印出來是樹形json結(jié)構(gòu),方便直觀#解碼: 將json格式字符串轉(zhuǎn)化為python對象review_j = json.loads(tb_json)for p in range(0, 19, 1):with open(r'./tao_data.csv','a',encoding = 'gb18030',newline='') as csvfile: #encoding = 'gb18030' 解決表情寫入csv報錯,但寫入CSV后會別成???不影響觀看就無視掉了writer = csv.writer(csvfile)output = [review_j["rateDetail"]["rateList"][p]['rateContent'].encode('utf-8').decode('utf-8')]writer.writerow(output)time.sleep(1) print('Done!')總結(jié)
以上是生活随笔為你收集整理的python爬虫入门——爬取淘宝商品评论信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue(h5)打包apk
- 下一篇: Python 提取数据库(Postgre