iT邦幫忙

0

google爬蟲,多個url問題

大家好,近日想爬取多個商家的google留言,但是卡在for迴圈該怎麼包/images/emoticon/emoticon02.gif

單間門市的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()
loukei iT邦新手 5 級 ‧ 2021-08-05 17:56:22 檢舉
包成函數,參數用店家URL?
用一隻爬蟲負責收集各店家的url存進list
另一隻爬蟲負責把list.裡一家一家收集評論

尚未有邦友回答

立即登入回答