gpt4 book ai didi

python - BeautifulSoup 改变 HTML

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:26 25 4
gpt4 key购买 nike

我注意到,当我使用 Beautiful Soup 从 Web 获取 HTML 时,它会以某种方式发生变化。这是我用来获取它的代码:

from bs4 import BeautifulSoup
import requests
url ="http://www.basketnews.lt/lygos/59-nacionaline-krepsinio-asociacija/2013/naujienos.html"
r = requests.get(url)
soup = BeautifulSoup(r.text)
print soup

这是原始 HTML 的一部分:

<a href="/news-73149-valanciunui-ir-raptors-sezonas-baigtas-foto-statistika.html">Valančiūnui ir Raptors sezonas baigtas <span class="title_description">(foto, statistika)</span></a>`

这是与 Beautiful Soup 相同的 HTML 部分:

<a href="/news-73149-valanciunui-ir-raptors-sezonas-baigtas-foto-statistika.html">ValanÄiÅ«nui ir âRaptorsâ sezonas baigtas <span class="title_description">(foto, statistika)</span></a>

您会看到我正在解析的 HTML 中的文本是如何困惑的。问题出在哪里?

最佳答案

您正在使用 r.text ,这意味着 requests将使用默认编码;但是它弄错了:

>>> r = requests.get(url)
>>> r.headers['content-type']
'text/html'
>>> r.encoding
'ISO-8859-1'
>>> r.apparent_encoding
'utf-8'

ISO-8859-1(拉丁文 1)是 HTTP 1.1 default encoding for text/ responses .

使用检测算法时,发现是UTF-8。

你不应该使用 r.text但使用 r.content相反,将其留给 BeautifulSoup 来进行检测:

soup = BeautifulSoup(r.content)

现在它可以正常工作了:

>>> soup = BeautifulSoup(r.content)
>>> soup.find('a', href='/news-73149-valanciunui-ir-raptors-sezonas-baigtas-foto-statistika.html')
<a href="/news-73149-valanciunui-ir-raptors-sezonas-baigtas-foto-statistika.html">Valančiūnui ir „Raptors“ sezonas baigtas <span class="title_description">(foto, statistika)</span></a>
>>> print soup.find('a', href='/news-73149-valanciunui-ir-raptors-sezonas-baigtas-foto-statistika.html').text
Valančiūnui ir „Raptors“ sezonas baigtas (foto, statistika)

BeautifulSoup 使用自动检测,但在这种情况下它会找到 <meta> 在页面中具有正确编码的 header :

>>> soup.find('meta', {'http-equiv': 'content-type'})
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>

关于python - BeautifulSoup 改变 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com