2012-01-30 2 views
4

웹 페이지에서 데이터를 스크랩하기 위해 BeautifulSoup을 사용하고 있습니다. 웹 사이트 데이터를 .txt 문서에있는 텍스트와 비교하려고합니다. 그러나 인코딩 문제가있는 것 같습니다. (. 어떤 HTML 엔티티) :파이썬 인코딩 문제 : 학위 기호 및 기타

source = "my url".read() 
.... 
soup = BeautifulSoup(source)  

웹 사이트는 BeautifulSoup로를 사용하여

이 웹 사이트를 읽을 텍스트 텍스트는 또한 "소스보기"에 다음과 같이 나타납니다 "400 °로 열 오븐"가

텍스트 문서가 "BOM없이 UTF-8로 인코딩"으로 인코딩 된 새 텍스트 문서로 만들어졌습니다. 그런 다음 웹 사이트의 "열 오븐 400 °"를 텍스트 문서에 복사하여 저장했습니다. 나는 두 개의 문자열을 비교하면

텍스트 파일

f = codecs.open('myfilename', encoding='utf-8') 

과 같이, 그들은 동일하지,하지만 난 그들이되고 싶어요.

무슨 일이 일어나는지 보려면 Eclipse에서 두 개의 텍스트를 분할하고 디버그 모드에서 변수를보고 BeautifulSoup의 도수 기호가 \ xc2 \ xb0으로 표시되는지 확인합니다. 텍스트 문서의 학위 기호는 \ xb0으로 나타납니다.

왜, 어떻게 수정해야합니까? 많은 특수 문자로이 문제가 발생하므로 일반적인 해결책이 필요합니다. 또한 여러 사이트의 데이터를 텍스트 문서에 복사하여 붙여 넣을 것입니다.

+0

윈도우 1252 인코딩에서 아름다운 수프의 마지막 리조트 추측, 오해 때 무엇을 얻을 수 있습니다 http://stackoverflow.com/search?q=[python]+beautifulsoup+encoding –

+0

텍스트 파일의 인코딩을 알고 적절하게 사용하고 있지만 웹 사이트의 인코딩은 고려하지 않았습니다. 기본적으로 바이트가 동일한 인코딩을 사용하고 있다면 바이트를 비교하거나 유니 코드 문자열을 비교하는 것이 좋습니다 (바이트를 가져 와서 올바른 인코딩을 사용하여 해석해야 함). – Cameron

+0

귀하의 노력에도 불구하고 텍스트 문서가 UTF-8이 아닌 것으로 보입니다. 또는 HTML이 어떻게 든 이중 인코딩됩니다 (차이점을 어떻게 진단했는지 정확하게 알 수는 없으며 정보를 추가하려는 경우 파일의 간단한 16 진 덤프가 도움이됩니다). – tripleee

답변

1

Beautiful Soup에는 인코딩을 올바르게 감지하는 데 필요한 것이 없습니다. BeautifulSoup (소스)를 BeautifulSoup (소스, fromEncoding = 'UTF-8')로 바꿈으로써 힌트를 줄 수 있습니다. 더 많은 옵션과 정보는 온라인 "Beautiful Soup Gives You Unicode, Dammit"에 있습니다.

바이트 '\ XC2 \ xb0'유니 코드 코드 포인트 U + 00B0의 UTF-8 인코딩이

+0

네, 고마워요, 이건 꽤 큰 문제입니다. 나는 수프를 만들기 전에 소스를 변경하고있었습니다. 아름답고 더 이상 인코딩을 인식하지 못합니다. "알았어, 알아 냈어." – user984003