程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 爬取攜程景點用戶評論信息教程_以武漢木蘭草原景點為例

編輯:Python

Python 爬取攜程景點用戶評論教程

話不多說,先看結果,滿意再點贊+關注+收藏!

這是爬取武漢木蘭草原的用戶評論

攜程木蘭草原頁面網址

https://you.ctrip.com/sight/wuhan145/50956.html

爬取中

爬取後保存為.CSV文件


上代碼!

編寫爬蟲類

// An highlighted block
import csv
import json
import time
import requests
class Reptile: #創建一個爬蟲類,方便在其他文件中調用
def __init__(self, postURL, user_agent, poiId, cid, startPageIndex, endPageIndex, file):
self.postURL = postURL
self.user_agent = user_agent
self.poiId = poiId
self.cid = cid
#上面這些對應著包中的頭部信息填就是了
self.startPageIndex = startPageIndex #開始爬取的頁碼
self.endPageIndex = endPageIndex #結束爬取的頁碼
self.file = file #保存記錄的.csv文件的文件名,一定要將後綴名也寫上,如:"****.csv"
self.dataListCSV = [] #用來暫存爬取結果,是一個二維列表,dataListCSV中的每一個元素對應一條記錄,便於寫入CSV文件
def get(self):
for i in range(int(self.startPageIndex), int(self.endPageIndex)+1): #爬取第 i 頁
requestParameter = {

'arg': {
'channelType': '2',
'collapseType': '0',
'commentTagId': '0',
'pageIndex': str(i), #爬取的評論頁面的頁碼索引
'pageSize': '10', #每頁的評論數量
'poiId': str(self.poiId), #景點地址代碼
'sortType': '1',
'sourceType': '1',
'starType': '0'},
'head': {
'auth': "",
'cid': self.cid, #不同景點的cid不同,因此需要自行設置
'ctok': "",
'cver': "1.0",
'extension': [],
'lang': "01",
'sid': "8888",
'syscode': "09",
'xsid': ""}
}
html = requests.post(self.postURL, data=json.dumps(requestParameter)).text
html = json.loads(html) #得到第i頁字典形式的全部評論數據
for element in html["result"]["items"]: #處理景色、趣味、性價比得分
if element['scores']:
if element['scores'][0]:
sceneryScore = str(element['scores'][0]["score"])
else:
sceneryScore = ""
if element['scores'][1]:
interestScore = str(element['scores'][2]["score"])
else:
interestScore = ""
if element['scores'][3]:
costScore = str(element['scores'][4]["score"])
else:
costScore = ""
else:
sceneryScore = ""
interestScore = ""
costScore = ""
#處理評論時間的格式
publishTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(element["publishTime"][6:16])))
self.dataListCSV.append([len(self.dataListCSV)+1, element["userInfo"]["userNick"], publishTime, element["score"], sceneryScore, interestScore, costScore, element["districtId"], element["content"]])
print(f"頁面 {i} 已爬取", type(html))
time.sleep(4)
print(self.dataListCSV)
with open(self.file, "w+", encoding="utf8", newline="") as f: #將dataListCSV列表內容寫入.csv文件中
write = csv.writer(f)
write.writerow(["序號","昵稱", "發布日期", "總體給分", "景色分", "趣味分", "性價比分", "地區編號", "評論內容"])
write.writerows(self.dataListCSV)

調用爬蟲

// An highlighted block
#我的Reptile類是放在dataProcurement包下的
from dataProcurement.Reptile import Reptile
postURL = "https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList?_fxpcqlniredt=09031083119044546256"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30"
poiId = 83520
cid = "09031083119044546256"
startPageIndex = 1
endPageIndex = 20
reptile = Reptile(postURL, user_agent, poiId, cid, startPageIndex, endPageIndex, "mlcy.csv")
reptile.get()

浏覽器對應包結構如下圖

找到networks(網絡)中的getCommentCollapseList包,postURL見標頭部分的請求URL,寫到https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList?_fxpcqlniredt=09031083119044546256

即可,不要全寫。
poiId和cid見請求負載部分,
user_agent就不用再多說了,能找到這篇文章的朋友應該都懂。

好了,到此你已經成功爬取到了攜程景點的用戶評論信息!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved