为了账号安全,请及时绑定邮箱和手机立即绑定

Python和BeautifulSoup编码问题

Python和BeautifulSoup编码问题

翻阅古今 2019-12-03 10:43:53
我正在使用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”,但仍然没有骰子。任何指针将不胜感激。
查看完整描述

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模块。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 662 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号