【问题标题】:Extract Text from div using bs4使用 bs4 从 div 中提取文本
【发布时间】:2020-02-17 14:59:36
【问题描述】:

我遇到了一个(可能非常简单的)问题。

我正在使用 python、chrome web 驱动程序和 selenium 抓取网站。

所以我可以找到包含信息的 div 类,但我无法提取其中的文本。

以下是我正在使用的代码:

 html = driver.page_source
print(html)

soup = bs4(html, "lxml")

#find infos
div = soup.find_all('div', class_="order-line-prod-material ng-binding")
div

然后输出是:

[<div class="order-line-prod-material ng-binding">AQ4174-010</div>,
 <div class="order-line-prod-material ng-binding">AQ4176-010</div>,
 <div class="order-line-prod-material ng-binding">AT7899-010</div>,
 <div class="order-line-prod-material ng-binding">AT7900-010</div>,
 <div class="order-line-prod-material ng-binding">AT7975-010</div>,
 <div class="order-line-prod-material ng-binding">AT8120-010</div>,
 <div class="order-line-prod-material ng-binding">AT8153-010</div>]

当我尝试使用时:

div.text

我得到的错误信息如下:

ResultSet 对象没有“文本”属性。您可能将项目列表视为单个项目。当你打算调用 find() 时,你调用了 find_all() 吗?

所以我知道我必须使用 for 循环,但我在网上找到的示例通常是这样的:

for a in div.find_all('a'):
    print(a.text)

我不明白的是我在 div 类中没有 a 标签,所以我必须迭代什么才能得到我想要的文本?

非常感谢您的帮助。

祝你有美好的一天

【问题讨论】:

标签: python selenium beautifulsoup


【解决方案1】:

如果 find.all 返回多个值,则应将其视为列表。 这应该打印每个 div 中的文本。

#find infos
divs = soup.find_all('div', class_="order-line-prod-material ng-binding")
for div in divs:
    print(div.text)

【讨论】:

  • 非常感谢:它肯定会引导我走上正确的道路......我仍然收到一条错误消息:SyntaxError:解析时意外 EOF。所以我查了一下,它似乎超出了范围,如果它有任何帮助,变量 divs 的类型是:element.ResultSet
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
相关资源
最近更新 更多