2012-12-19 3 views
1

웹 사이트의 스크랩 된 데이터를 CSV 파일로 출력하려고합니다. 먼저 UnicodeEncoding 오류가 발생했으나 다음 코드를 사용한 후 :파이썬과 아름다운 스프를 사용하여 긁힌 데이터를 CSV 파일로 출력 할 때의 문제

import csv 
import urllib2 
import sys 
from bs4 import BeautifulSoup 
if __name__ == "__main__": 
    reload(sys) 
    sys.setdefaultencoding("utf-8") 
page = urllib2.urlopen('http://www.att.com/shop/wireless/devices/smartphones.html').read() 
soup = BeautifulSoup(page) 
soup.prettify() 
for anchor in soup.findAll('a', {"class": "clickStreamSingleItem"}): 
     print anchor['title']   
     with open('Smartphones.csv', 'wb') as csvfile: 
       spamwriter = csv.writer(csvfile, delimiter=',')   
       spamwriter.writerow([(anchor['title'])])  

하지만 출력 CSV 만 장치 이름을 얻고, 내가 어떤을하지 않습니다 는

if __name__ == "__main__": 
reload(sys) 
sys.setdefaultencoding("utf-8") 
내가 CSV를 생성 할 수 있어요

, 아래의 같은 코드입니다 프로그래밍 배경, 용서를위한 나를 용서 이자형. 문제를 정확하게 지적 해 주시겠습니까?

답변

1

예상됩니다. 요소를 찾을 때마다 파일을 처음부터에서 작성합니다. 당신이 찾아 각각의 앵커에 대한 행을 쓰기의 링크를 통해 반복하기 전에 파일을 한 번만 를 엽니 다

with open('Smartphones.csv', 'wb') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter=',')   
    for anchor in soup.findAll('a', {"class": "clickStreamSingleItem"}): 
     print anchor['title']   
     spamwriter.writerow([anchor['title'].encode('utf8')]) 

먼저 파일을 지 웁니다 w로 쓰기 위해 파일 열기, 당신은 각 앵커 그 일을했다.

유니 코드 오류에 대해서는 기본 인코딩을 변경하지 않아도됩니다. 대신 행을 올바르게 인코딩하십시오. 나는 위의 예에서 그렇게 했으므로 전체 .setdefaultencoding() 전화를 제거 할 수 있습니다 (그리고 전에 reload()).

+0

고마워요! 이것은 작동 중입니다. –

관련 문제