以下是我遇到麻烦的HTML,
<div id="id" class="class">
text
</div>
假设我有一个包含Soup的变量,
div = find('div', attrs={'class': 'class'})
如何获取div的文本部分?
我已经分别尝试了其中一些方法。
text = div.get_text()
text = div.string
text = div.text
当我跑步时
type(div)
它的类型为BeautifulSoup.Tag,但是当我调用上述任何一种方法时,它会说“无类型”#39;没有任何属性。
我能够从
和其他属性中取出它,而不是div。
我已经查看了有关BeautifulSoup的其他几个问题,但没有人解决过这个问题。
答案 0 :(得分:2)
我不太确定这里的问题是什么,但这是一个有效的例子:
from bs4 import BeautifulSoup
html = """
<div id="id" class="class">
text
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
div = soup.find('div', attrs={'class': 'class'})
print (type(div.text))
print (div.text)
输出:
<type 'unicode'>
text
答案 1 :(得分:1)
我发现您的代码没有任何问题。如果方法返回无是因为BeautifulSoup的find
函数未找到标记和/或属性。以下是一些建议:
find_all()
功能而不只是find()
(它会返回一个列表)这是我测试过的代码并且运行正常:
from bs4 import BeautifulSoup as bs
html = '<div id="id" class="class">exemple_text</div>'
div = bs(html, 'html5lib')
answer = div.find('div', attrs={'class': 'class'})
print(answer.text)
答案 2 :(得分:0)
您是否尝试从元素中提取文本?试试这个:
html='''
<div id="id" class="class">
text
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"lxml")
item = soup.find(id="id").text.strip()
item1 = soup.find("div").text.strip()
item2 = soup.find(class_="class").text.strip()
print(item,item1,item2)
他们都给你相同的结果:
text text text