大家好,近日想爬取多個商家的google留言,但是卡在for迴圈該怎麼包
單間門市的code>>可執行,完全沒問題
import requests
from bs4 import BeautifulSoup
import time #for sleep 禮貌
import json
import pandas as pd
import numpy as np
from datetime import datetime
'輸入URL'
mos_url = ['https://www.google.com.tw/maps/preview/review/listentitiesreviews?authuser=0&hl=zh-TW&gl=tw&pb=!1m2!1y3777493749147037723!2y8534284370484108607!2m2!1i'+str(i*10)+'!2i10!3e1!4m5!3b1!4b1!5b1!6b1!7b1!5m2!1sS1ECYffLOIXDmAXwxYL4Bg!7e81','https://www.google.com.tw/maps/preview/review/listentitiesreviews?authuser=0&hl=zh-TW&gl=tw&pb=!1m2!1y3776609519000852551!2y14246988762960797572!2m2!1i'+str(i*10)+'!2i10!3e1!4m5!3b1!4b1!5b1!6b1!7b1!5m2!1sS1ECYffLOIXDmAXwxYL4Bg!7e81']
#%%
'預設1500篇'
for url in mos_url :
null = np.nan #將api裡的null變成nan,不然會報錯
final = []
end = 0
i = 0
while end == 0: #判斷何時停止
if i%5 == 0 : print(i,end='->')
# 摩斯
print(url) # chk有在動
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]: #評論資訊都在這
# print(len(data))
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(1) #禮貌啦哪次不禮貌
# 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:/mos全省爬蟲.csv',encoding="utf-8-sig")
#exit()
#%%
'chk'
new_df['評分'].mean()
new_df['評分'].count()