解析此网站时遇到问题:http://fm4-archiv.at/files.php?cat=106
我的chrome浏览器正确地显示了元音变音,正如你在上面的屏幕截图中看到的那样。但是在其他页面(例如:http://fm4-archiv.at/files.php?cat=105)上,元音变化没有正确显示,如下面的屏幕截图所示:
meta HTML标记在页面上定义以下字符集:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
我使用pythonrequests包获取HTML,然后使用Beautifulsoup来获取所需的数据。我的代码如下:
^{pr2}$如果我打印编码(print(r.encoding
),结果是UTF-8
。如果我通过调用r.encoding = ISO-8859-1
将编码手动更改为ISO-8859-1
或{
r = requests.get(URL)
r.encoding = 'ISO-8859-1'
soup = BeautifulSoup(r.content,"lxml")
仍然会在python IDE的控制台输出上显示以下字符串:
Der Wildlöwenpfleger
相反,它应该是
Der Wildlöwenpfleger
如何更改代码以正确解析元音变音?在
我刚找到两个解决办法。你能确认一下吗?在
以及
^{pr2}$这两个结果都会产生以下示例输出:
编辑: 我只是想知道为什么这些工作,因为}。这说明请求无论如何都将数据处理为}会产生所需的输出?在
r.encoding
结果是{UTF-8
数据。因此,我想知道为什么.decode('utf-8','ignore')
或{编辑2: 好吧,我想我现在明白了。
.decode('utf-8','ignore')
和fromEncoding='utf-8'
意味着实际数据被编码为UTF-8
,而beautifulGroup应该对其进行解析,并将其处理为UTF-8
编码的数据,实际上就是这样。在我假设}没有。因此,我必须做这个额外的解码。在
requests
正确地将其处理为UTF-8
,但{一般来说,不要使用
r.content
这是接收到的字节串,而是使用r.text
,它是使用requests
确定的编码的解码内容。在在这种情况下,
requests
将使用UTF-8对传入的字节字符串进行解码,因为这是服务器在Content-Type
报头中报告的编码:这将解决“Wildlöwenpfleger”问题,然而,页面的其他部分随后开始中断,例如:
^{pr2}$显示“Wildlöwenpfleger”是固定的,但现在“übergebergen”和其他第二个链接被破坏。在
在一个HTML文档中似乎使用了多个编码。第一个链接使用UTF-8编码:
但第二个链接使用ISO-8859-1编码:
显然,在同一个HTML文档中使用多个编码是不正确的。除了联系文档的作者并要求更正之外,处理混合编码没有太多的事情可以轻松完成。也许您可以在处理数据时对其运行^{} ,但这并不令人愉快。在
相关问题 更多 >
编程相关推荐