大家好,小弟用下方API成功爬到google的商家評論,但只有一間門市,而且每次都要改url,想詢問怎麼一次爬完所有分店(以麥當勞為例的話),另外這個API要錢嗎(覺得怕)
import requests
from bs4 import BeautifulSoup
import time #for sleep 禮貌
import json
import pandas as pd
import numpy as np
from datetime import datetime
'預設1500篇'
null = np.nan #將api裡的null變成nan,不然會報錯
final = []
end = 0
i = 0
while end == 0: #判斷何時停止
if i%5 == 0 : print(i,end='->')
url ='https://www.google.com.tw/maps/preview/review/listentitiesreviews?authuser=0&hl=zh-TW&gl=tw&pb=!1m2!1y3765757233225575679!2y9104663542408472851!2m2!1i'+str(i*10)+'!2i10!3e2!4m5!3b1!4b1!5b1!6b1!7b1!5m2!1scXLQYLygDom2mAW94IjYBw!7e81'
# 留言處> F12> network> 滑動看新增甚麼> url複製過來> 3e1改3e2> li拆兩段
print(url) # chk 搜尋會下載個txt檔
req_text = requests.get(url)
res = eval(req_text.text.replace(')]}\'\n','')) #整理一下
if type(res[2]) == float: #評論資訊是nan就停止,代表沒留言了
print('stop')
end = 1
else:
for data in res[2]: #評論資訊都在這
res_dict = {}
for j in range(len(data)):
res_dict[j] = data[j]
res_dict['scrap_time'] = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
final.append(res_dict)
i+=1
if i > 150: #避免無線迴圈,要爬多少則留言(留言數 = i*10)
end = 1
time.sleep(.5) #禮貌啦哪次不禮貌
# print(final)
df = pd.DataFrame(final)
#將epoch time轉成時間 (建議用df apply但我不會...QQ)
arr = []
for i in range(len(df)):
arr.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(round(df[27][i]/1000)))))
df['post_time'] = arr
new_df = df[[0,3,4,10,11,12,14,16,18,27,30,32,39,'post_time','scrap_time']]
#篩選重要欄位
new_df_columns = ['用戶資料', '留言內容', '評分', '某id1', '某id2',
'用戶資訊詳細','圖片資訊詳細', '讚數', '圖片清單連結',
'貼文epoch時間','恩災(感覺重要)', '語言','恩災2',
'貼文時間','爬蟲時間'] #欄位重新命名
new_df.columns = new_df_columns
new_df
new_df.to_csv('D:/Gmap爬蟲檔案範例.csv',encoding="utf-8-sig")