用beautifulsoup在一个div中获取孩子的文字

Posted

技术标签:

【中文标题】用beautifulsoup在一个div中获取孩子的文字【英文标题】:Get text of children in a div with beautifulsoup 【发布时间】:2014-01-20 07:18:57 【问题描述】:

您好,我想要 Google Playstore 中的应用程序描述。 (https://play.google.com/store/apps/details?id=com.wetter.androidclient&hl=de)

import urllib2
from bs4 import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen("https://play.google.com/store/apps/details?id=com.wetter.androidclient&hl=de"))
result = soup.find_all("div", "class":"show-more-content text-body")

通过这段代码,我得到了这个类的全部内容。但我不能只得到其中的文字。我用 next_silbing 或 .text 尝试了很多东西,但它总是抛出错误(ResultSet 没有属性 xxx)。

我只想得到这样的文本:“Die Android App von wetter.com!Sie erhalten: ..:”

谁能帮帮我?

【问题讨论】:

【参考方案1】:

在元素上使用.text 属性;你有一个 list 结果,所以循环:

for res in result:
    print(res.text)

.text 是一个代理 Element.get_text() method 的属性。

或者,如果只有一个这样的<div>,请使用.find()而不是.find_all()

result = soup.find("div", "class":"show-more-content text-body")
print(result.text)

【讨论】:

请注意,根据文档,该属性不存在。但是,get_text() 函数可以。 @Mike'Pomax'Kamermans 这是一个文档错误。 .text 是 property that calls .get_text() hm,我在bugs.launchpad.net/beautifulsoup 上没有看到这方面的错误,而且这是一个写得很好的部分,所以......如果是的话,谈论@987654335 可能还是不错的@ 作为“东西”,.text 作为一个方便的快捷方式 - 如果人们想了解更多关于这个属性的信息,他们不会通过搜索 .text 在文档中找到它,而他们 正在通过搜索get_text来查找东西。 @Mike'Pomax'Kamermans:很公平,补充道。【参考方案2】:

使用decode_contents() 方法。

import urllib2
from bs4 import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen("https://play.google.com/store/apps/details?id=com.wetter.androidclient&hl=de"))
result = soup.find_all("div", "class":"show-more-content text-body")

for res in result:
    print(res.decode_contents().strip())

您将从 div 中获取 innerhtml

【讨论】:

以上是关于用beautifulsoup在一个div中获取孩子的文字的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 获取标签的孩子数

Beautiful Soup 为特定的 div 找到孩子

使用 BeautifulSoup 按 id 获取 div 的内容

BeautifulSoup获取指定class样式的div

在 IE8 中获取 div 的最后一个孩子?

怎么使用beautifulsoup获取指定div标签内容