我正在努力改进Python IRC bot的字符编码支持,以检索在频道中提到其URL的页面的标题.
我正在使用的当前流程如下:
请求:
r = requests.get(url, headers={ 'User-Agent': '...' })
美丽的汤:
soup = bs4.BeautifulSoup(r.text, from_encoding=r.encoding)
title = soup.title.string.replace('\n', ' ').replace(...)
等等
指定from_encoding=r.encoding
是一个好的开始,因为它允许我们在解析页面时charset
从Content-Type
头部注意.
如果它的表面落在其标题上的页面指定a 或
代替(或在顶部).
charset
Content-Type
我目前看到的方法如下:
在解析页面时无条件地使用Unicode,Dammit.这是默认设置,但它似乎对我测试过的任何页面都无效.
在解析页面之前或之后无条件地使用ftfy.我不喜欢这个选项,因为它基本上依赖于我们(通常)拥有完美信息的任务的猜测.
编写代码来寻找合适的标签,尝试注意我们在那里找到的任何编码,然后再回到Requests'
.encoding
,可能与之前的选项结合使用.我觉得这个选项很理想,但如果它已经存在,我宁愿不写这个代码.
TL; DR是否有正确的方法来使美丽的汤正确地注意到网页上任意HTML页面的字符编码,使用与浏览器使用类似的技术?