我正在使用BeautifulSoup用Python编写爬虫,直到我遇到这个站点,一切都进行得很顺利:http://www.elnorte.ec/我正在请求库中获取内容:r = requests.get('http://www.elnorte.ec/')content = r.content如果我在那时打印内容变量,则所有西班牙语特殊字符似乎都可以正常工作。但是,一旦我尝试将content变量提供给BeautifulSoup,它就会变得一团糟:soup = BeautifulSoup(content)print(soup)...<a class="blogCalendarToday" href="/component/blog_calendar/?year=2011&month=08&day=27&modid=203" title="1009 artÃculos en este dÃa">...显然是在塞满所有西班牙特殊字符(重音和诸如此类)。我尝试做content.decode('utf-8'),content.decode('latin-1'),也尝试将fromEncoding参数设置为BeautifulSoup,将其设置为fromEncoding ='utf-8'和fromEncoding =“ latin-1”,但仍然没有骰子。任何指针将不胜感激。
3 回答

ibeautiful
TA贡献1993条经验 获得超5个赞
对于您的情况,此页面有错误的utf-8数据,这会使BeautifulSoup感到困惑,并使其认为您的页面使用的是Windows-1252,您可以执行以下操作:
soup = BeautifulSoup.BeautifulSoup(content.decode('utf-8','ignore'))
这样,您将丢弃页面源中的任何错误符号,BeautifulSoup将正确猜测编码。
您可以将“忽略”替换为“替换”,并检查文本中的“?” 符号以查看已丢弃的内容。
实际上,编写爬虫程序非常困难,它可以每次以100%的机会猜测页面编码(如今的浏览器非常擅长),您可以使用诸如“ chardet”之类的模块,但是例如,在您的情况下,它将猜测编码按照ISO-8859-2,这也不正确。
如果您确实需要获取用户可能提供的任何页面的编码,则应该构建一个多级(尝试utf-8,尝试latin1,try等...)检测功能(就像我们在项目中所做的那样) )或使用来自firefox或铬的一些检测代码作为C模块。
添加回答
举报
0/150
提交
取消