Python和BeautifulSoup编码问题

我正在使用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&amp;month=08&amp;day=27&amp;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”,但仍然没有骰子。


任何指针将不胜感激。


翻阅古今
浏览 663回答 3
3回答

ibeautiful

对于您的情况,此页面有错误的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模块。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python