BeautifulSoup 不在标签 <div> 中显示标签 <a>

时间:2021-04-06 18:08:32

标签: python html parsing beautifulsoup

在一些测试中,我注意到 div 标签内的标签 abeautifulsoup 会自动将其“翻译”为文本:< /p>

<div class='a'>
   <a href='....'>TEXT</a>
   <i .....
</div>

当我使用命令 find_all('div', {'class' : 'a'}) 搜索 div 标签并尝试打印结果 div.a 时,bs4 显示值 None.. . 但如果我尝试使用 print div.text bs4 只显示 TEXT 而不是标签 a)。

这是部分代码:

soup = BeautifulSoup(html, 'lxml')
data=soup.find_all('div', {'class' : 'a'})    

for div in data:
   print div.a

$ None

为什么?

更新:刚才我注意到……这是另一个问题。在源代码中有标签 a... 但是现在,(使用 prettify 查看输出)我意识到标签 bs4 让我将其视为 div,而实际上它是一个标签a!奇怪!!!

BUG???

已解决 我做了一些清理并删除了请求和 urllib3 的所有包……然后我用 apt 重新安装了所有东西,现在可以工作了。 requests 和 urllib3 的包版本(分别)为:2.12.4-11.19.1-1

1 个答案:

答案 0 :(得分:0)

我无法复制您的问题,但是您使用的 HTML 中有一个错字:clas='a' 应该是 class='a'

我使用的代码:

from bs4 import BeautifulSoup

html = '''<div class='a'>
   <a href='....'>TEXT</a>
   <i> .....</i>
</div>'''
soup = BeautifulSoup(html, 'html.parser')
data = soup.find_all('div', {'class': 'a'})
for div in data:
   print (div.a)

我得到的输出:

<a href="....">TEXT</a>

.text 不会显示标签,而只会显示所选标签及其子标签内的文本。您还需要 BeautifulSoup 对象才能使用 find_all 方法