2013-07-11 1 views
0

웹 사이트 정보를 가져 오는 데 BeautifulSoup을 사용하고 있습니다. 특히, Google 검색 (제목, 발명가, 초록 등)에서 특허에 대한 정보를 수집하려고합니다. 나는 각 특허에 대한 URL 목록을 가지고 있지만, BeautifulSoup로 나에게 다음과 같은 오류주고, 특정 사이트에 문제가있다 :BeautifulSoup 문자 코드 오류

UnicodeDecodeError : 'UTF8'코덱이 위치 (531)에서 바이트가 0xCC를 디코딩 할 수 없습니다 무효 연속 바이트

다음은 오류 추적 있습니다 :

Traceback (most recent call last): 
    soup = BeautifulSoup(the_page,from_encoding='utf-8') 
    File "C:\Python27\lib\site-packages\bs4\__init__.py", line 172, in __init__ 
    self._feed() 
    File "C:\Python27\lib\site-packages\bs4\__init__.py", line 185, in _feed 
    self.builder.feed(self.markup) 
    File "C:\Python27\lib\site-packages\bs4\builder\_lxml.py", line 195, in feed 
    self.parser.close() 
    File "parser.pxi", line 1209, in lxml.etree._FeedParser.close (src\lxml\lxml.etree.c:90597) 
    File "parsertarget.pxi", line 142, in lxml.etree._TargetParserContext._handleParseResult (src\lxml\lxml.etree.c:99984) 
    File "parsertarget.pxi", line 130, in lxml.etree._TargetParserContext._handleParseResult (src\lxml\lxml.etree.c:99807) 
    File "lxml.etree.pyx", line 294, in lxml.etree._ExceptionContext._raise_if_stored (src\lxml\lxml.etree.c:9383) 
    File "saxparser.pxi", line 259, in lxml.etree._handleSaxData (src\lxml\lxml.etree.c:95945) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcc in position 531: invalid continuation byte 

내가 사이트의 인코딩을 확인하고는 'UTF-8'로 주장하고있다. 나는 이것을 BeautifulSoup의 입력으로 지정했다. 아래는 내 코드입니다.

import urllib, urllib2 
from bs4 import BeautifulSoup 

#url = 'https://www.google.com/patents/WO2001019016A1?cl=en' # This one works 
url = 'https://www.google.com/patents/WO2006016929A2?cl=en' # This one doesn't work 

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
values = {'name' : 'Somebody', 
      'location' : 'Somewhere', 
      'language' : 'Python' } 
headers = { 'User-Agent' : user_agent } 

data = urllib.urlencode(values) 
req = urllib2.Request(url, data, headers) 
response = urllib2.urlopen(req) 
the_page = response.read() 

print response.headers['content-type'] 
print response.headers.getencoding() 

soup = BeautifulSoup(the_page,from_encoding='utf-8') 

두 개의 URL이 포함되어 있습니다. 하나는 오류를 일으키고 다른 하나는 잘 동작합니다 (주석에 레이블이 붙어 있음). 두 경우 모두 터미널 html로 html을 인쇄 할 수 있지만 BeautifulSoup는 계속 충돌합니다.

어떤 권장 사항이 있습니까? 이것은 BeautifulSoup의 첫 번째 사용법입니다.

+0

을 – user1911297

답변

0

당신은 UTF-8 문자열 인코딩한다 : 나는 창문에 파이썬 2.7, BeautifulSoup4을 사용하고

soup = BeautifulSoup(the_page.encode('UTF-8'))