Python an Beautiful Soup을 사용하여 웹 사이트에서 업체의 이름, 주소 및 전화 번호를 가져 오는 스크립트를 만들었으며 출력은 CSV 파일의 세 열에 저장됩니다.
스크립트는 잘 작동하지만 다음과 같은 비즈니스 이름을 얻으면 중지됩니다.
u'\nLevel 12, 280 George Street SYDNEY\xa0 NSW\xa0 2000. . Sydney. NSW 2000\n'
문제는 "xa0"부분입니다. 오류 메시지는 다음과 같습니다.
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 35: ordinal not in range(128)
이 오류가 무엇을 의미하는지 모호하지만 어떻게 처리해야할지 모르겠습니다. 어떤 아이디어?
감사
편집하다:
내 스크립트는 다음과 같습니다.
import bs4
import requests
page = requests.get('http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx?Page=0')
soup = bs4.BeautifulSoup(page.content)
for company in soup.select('table#ctl00_ContentPlaceHolder1_dgLawyers tr > td > table'):
name = company.a.text
address = company.find_all('tr')[1].text
phone = company.tr.find_all('td')[1].text
with open('/home/kwal0203/Desktop/eggs.csv', 'a') as csvfile:
s = csv.writer(csvfile)
s.writerow([name,address,phone])
utf-8
Python의 내장 csv
기능이 유니 코드를 지원하지 않으므로 csv 파일에 쓰는 동안 형식 으로 인코딩해야합니다 .
def remove_non_ascii(text):
return ''.join(i for i in text if ord(i)<128)
name = remove_non_ascii(company.a.text)
address = remove_non_ascii(company.find_all('tr')[1].text)
phone = remove_non_ascii(company.tr.find_all('td')[1].text)
with open('/home/kwal0203/Desktop/eggs.csv', 'a') as csvfile:
s = csv.writer(csvfile)
s.writerow([data.encode("utf-8") for data in [name,address,phone]])
또는 기본적으로 유니 코드를 지원하는 unicodecsv 를 설치할 수 있습니다 .
이렇게 설치할 수 있습니다.
pip install unicodecsv
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다