2017-12-04 9 views
1

아래 코드는 비공식 API 인 "https://github.com/GeneralMills/pytrends"을 사용하는 Google 트렌드 크롤러입니다. 내 코드는 잘 실행되지만 한 가지 문제는 아무도 Google 트렌드 크롤러의 한도를 모른다는 것입니다. 따라서 2000 개 이상의 "DNA"목록으로 크롤러를 실행하면 요청 제한을 초과했다는 오류가 발생합니다. 제한을 초과 한 경우 코드 끝 부분에서 CSV에 글을 올리면서 제한 전에 모든 크롤링 된 데이터가 손실됩니다. 모든 루프에 대해 csv에 데이터를 쓰는 방법이 있습니까? 그렇기 때문에 제한을 넘긴 후에도 제한에 도달하기 전에 최소한 데이터가 있습니까? 감사합니다Google 트렌드 크롤러 : CSV 작성 문제

from pytrends.request import TrendReq 
from datetime import datetime 
import pandas as pd 
import time 
import xlsxwriter 

pytrends = TrendReq(hl='en-US,tz=360') 
Data = pd.DataFrame() 

#for loop check writer path 
path = "C:/Users/aijhshin/Workk/GoogleTrendCounter.txt" 
#file = open(path,"a") 

#setting index using 'apple' keyword 
kw_list = ['apple'] 
pytrends.build_payload(kw_list, cat=0, timeframe='today 5-y', geo='', gprop='') 
Googledate = pd.DataFrame(pytrends.interest_over_time()) 
Data['Date'] = Googledate.index 

#Google Trend Crawler limit = 1600 request per day 
for i in range(len(DNA)): 
    kw_list = [DNA[i]] 
    pytrends.build_payload(kw_list, cat=0, timeframe='today 5-y', geo='', gprop='') 

    #results 
    df = pd.DataFrame(pytrends.interest_over_time()) 
    if(df.empty == True):   
     Data[DNA[i]] = "" 
    else:       
     df.index.name = 'Date' 
     df.reset_index(inplace=True) 
     Data[DNA[i]] = df.loc[:, DNA[i]] 

    #test for loop process 
    file = open(path,"a") 
    file.write(str(i) + " " + str(datetime.now()) + " ") 
    file.write(DNA[i] +'\n') 
    file.close() 

    #run one per nine second (optional) 
    #time.sleep(9) 

    #writing csv file (overwrite each time) 
    Data.to_csv('Google Trend.csv') 

print("Crawling Done") 
+0

Google과 아무런 관련이 없습니다. 느슨한 데이터가 아닌 파일을 크롤링하는 경우 항상 파일을 추가하는 것이 좋습니다. 파일 쓰기를 루프로 옮기십시오. BTW 어디에서'DNA'가 정의 되었습니까? – user1767754

+0

DNA는 이전에 list로 정의되어 있습니다. 내 파일 쓰기를 루프로 옮기는 것을 구체적으로 말할 수 있습니까? "time.sleep (9)"옆에 "Data.to_csv ('Google Trend.csv')"를 넣었습니까? 고마워요 – Kang

답변

2

time.sleep(9) 후 이동 Data.to_csv('Google Trend.csv') 및 덮어 쓰기보다는 당신의 csv 파일의 끝에 추가합니다 a

time.sleep(9) 
Data.to_csv('Google Trend.csv', mode='a') 

모드 a로 모드의 변경합니다.

+0

"Data.to_csv ('Google Trend.csv', mode = 'a')"첫 번째 루프에 대한 CSV 파일을 만들고 다음 루프에서 데이터를 계속 추가 할 수 있습니까? 대답 주셔서 감사합니다 btw! – Kang

+0

정확히 그게 효과가 있었길 바래요? – user1767754

+0

나는 csv를 mode = 'a'로 테스트했는데 문제가 하나있다. 데이터가 csv 파일을 추가하면 전체 데이터를 세로로 추가합니다. 따라서 처음 10 개의 루프가 끝나면 각 테이블의 다음에 열을 추가 한 세로 10 개의 테이블이 수직으로 있습니다. 그래서 그냥 덮어 쓰는 것이 괜찮습니까? csv에 대한 필자의 마지막 데이터가 있다면, 나는 행복하다. – Kang