2017-01-18 3 views
-1

파이썬 3에서 사이트의 4 개의 다른 페이지에서 데이터를 긁어내는 스크립트를 만들었습니다. 그것은 잘 작동하지만 내가 CSV 파일에 그 결과를 얻으려고하면, 뭔가 잘못되고 그것은 단지 마지막 페이지의 정보를 인쇄합니다. 아무도 나를 도울 수 없어요. 내가 고려할 스크립트를 첨부했습니다. 내가 뭘 잘못하고 있는지 알고 싶어하지 마.파이썬으로 CSV 조작 3

import csv 
import requests 
from bs4 import BeautifulSoup 

def web_crawler(mpage): 
    page=1 
    while page<=mpage: 
     url=requests.get("http://www.yellowpages.com/search?search_terms=Coffee%20Shops&geo_location_terms=San%20Francisco%2C%20CA&page="+str(page)) 
     soup=BeautifulSoup(url.text,'html.parser') 
     x=soup.findAll(class_='info') 
     gist=[] 
     for z in x: 
      Item=z.findAll(class_="business-name") 
      for Title in Item: 
       Name=Title.text 
       Patta=z.findAll(class_="adr") 
      for Thikana in Patta: 
       Address=Thikana.text 
       Number=z.findAll(class_="phones") 
      for Token in Number: 
       Phone=Token.text 
       metco=(Name,Address,Phone) 
       print(metco) 
       gist.append(metco) 

      outfile=open('data.csv','w',newline='') 
      writer=csv.writer(outfile) 
      writer.writerow(["Name","Address","Phone"]) 
      writer.writerows(gist)     

     page+=1       
web_crawler(4) 
+0

w를 사용하여 파일을 열면 기존 파일이 지워질 수 있습니다. docu – frlan

답변

0

당신은 메인 루프 밖으로 이동 루프

outfile=open('data.csv','w',newline='') 

시도에서 파일을 덮어 쓰기합니다.

+0

시도해보십시오. 그러나 지금과 같은 결과를 발견했습니다. 만약 내가 실수하지 않았다면 다음과 같이 제안 할 것입니다 : page + = 1 outfile = open ('data.csv', 'w', newline = '') writer = csv.writer (outfile) writer.writerow ("이름", "주소", "전화")) writer.writerows (요점) – SIM

+0

'outfile = open ('data.csv', 'w')'before'while 페이지 <= mpage :' – zstewart

+0

고마워 선생님 "Maximilian Peters". 당신이 방금 제안한대로 작동합니다. 이제는 잘 작동합니다. 나는 당신을 먼저 얻지 못했습니다. 그러나 코드가 시작되는 맨 위에 내가 언급 한 행을 넣었 기 때문에 코드가 약간 어색해 보입니다. 그걸 제안 해주세요. 그래도 코드는 정상적으로 작동합니다. – SIM

관련 문제