使用Beautiful Soup进行Python Web抓取3:如何从div获取文本

时间:2017-09-19 19:39:03

标签: html python-2.7 web-scraping beautifulsoup

以下是我遇到麻烦的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的其他几个问题,但没有人解决过这个问题。

3 个答案:

答案 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()(它会返回一个列表)
  • 确保类位于 div
  • 标记中
  • 尝试使用BeautifulSoup的不同库,例如'lxml','html5lib'等
  • 如果可能,请使用Python 3
  • 尝试相同的代码

这是我测试过的代码并且运行正常:

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