【问题标题】:tag h4 enclosed in div class标签 h4 包含在 div 类中
【发布时间】:2019-05-25 21:24:28
【问题描述】:

我在使用 Beautifulsoup 分析具有“div”属性的 HTML 元素时遇到问题。代码是这样的

我需要提取 h4 标签内的内容,我无法搜索文本“Ocarrol”,因为它是一个随机值

find('div',{"class": "carResultRow_OfferInfo_Supplier-wrap "})

查询时,我返回无

<div class="carResultRow_OfferInfo_Supplier-wrap ">
<h3 class="carResultRow_OfferInfo_SupplierLabel">Servicio proporcionado por:</h3>
<img src="https://cdn2.rcstatic.com/images/suppliers/flat/ocarrol_logo.gif" title="Ocarrol" alt="Ocarrol">
<h4 style="" xpath="1">Ocarrol</h4>
<a href="InfoPo=0&amp;driversAge=30&amp;os=1" onclick="GAQPush('cboxElement">Términos y condiciones</a>
</div>

link

添加链接,在这种情况下我只需要汽车公司的名称 Ocarrol、Ocarrol、Hertz、Fit Car Rental..等

【问题讨论】:

  • 有网址可以分享吗?

标签: python selenium beautifulsoup


【解决方案1】:

我假设您使用的是 BeautifulSoup 4.7+。某些属性在 Beautiful Soup 中的处理有点特殊,在 4.7 中,最终结果与

通常作为空格分隔列表处理的属性与所有其他属性的处理方式略有不同。 class 恰好是这些属性之一,通常作为空格分隔列表处理。 BeautifulSoup 实际上并没有将这些属性存储在 HTML 文档中,而是将它们存储为类列表(删除了空格):"class1 class2 " -> ['class1', 'class2']。当它需要将类属性评估为字符串时,它会重新组合类,以将每个值与它们之间的空格连接起来,但请注意不再存在诸如尾随空格之类的内容:"class1 class2"

现在,我并不是说这是一个直观的事情,只是这就是 BeautifulSoup 所做的。我个人更喜欢 BeautifulSoup 将它们存储为原始字符串,然后在需要时将它们拆分为一个列表,但这不是他们所做的。

现在在 BeautifulSoup

soup.find('div',{"class": "carResultRow_OfferInfo_Supplier-wrap"})

您可以在此处阅读有关此行为的更多信息:https://bugs.launchpad.net/beautifulsoup/+bug/1824502


例子

from bs4 import BeautifulSoup

html = """
<div class="carResultRow_OfferInfo_Supplier-wrap ">
<h3 class="carResultRow_OfferInfo_SupplierLabel">Servicio proporcionado por:</h3>
<img src="https://cdn2.rcstatic.com/images/suppliers/flat/ocarrol_logo.gif" title="Ocarrol" alt="Ocarrol">
<h4 style="" xpath="1">Ocarrol</h4>
<a href="InfoPo=0&amp;driversAge=30&amp;os=1" onclick="GAQPush('cboxElement">Términos y condiciones</a>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')

print(soup.find('div',{"class": "carResultRow_OfferInfo_Supplier-wrap"}).find('h4'))

输出

<h4 style="" xpath="1">Ocarrol</h4>

【讨论】:

  • 有或没有空间一直返回我无
  • @Sebas79,我发布了一个我在本地测试过的示例,该示例在我的回答中对我有用。如果您遇到问题,则必须发布一个不起作用的示例。您使用的是哪个版本的 BeautifulSoup?我的工作示例不适合您吗?
  • 这个解决方案给了我所有的结果,我只需要 h4 标签上的内容,上面我留下了链接
  • @Sebas79,我已经更新了一个只选择 h4 的解决方案。我主要是解决None 的问题,但我看到你也想要h4。调整后的解决方案应该可以工作。
【解决方案2】:

也许您可以使用 CSS 选择器来代替查找?

from bs4 import BeautifulSoup

html = '''<div class="carResultRow_OfferInfo_Supplier-wrap ">
<h3 class="carResultRow_OfferInfo_SupplierLabel">Servicio proporcionado por:</h3>
<img src="https://cdn2.rcstatic.com/images/suppliers/flat/ocarrol_logo.gif" title="Ocarrol" alt="Ocarrol">
<h4 style="" xpath="1">Ocarrol</h4>
<a href="InfoPo=0&amp;driversAge=30&amp;os=1" onclick="GAQPush('cboxElement">Términos y condiciones</a>
</div>'''
soup = BeautifulSoup(html, 'lxml')

print(soup.select('div[class="carResultRow_OfferInfo_Supplier-wrap"]'))

打印:

[<div class="carResultRow_OfferInfo_Supplier-wrap">
<h3 class="carResultRow_OfferInfo_SupplierLabel">Servicio proporcionado por:</h3>
<img alt="Ocarrol" src="https://cdn2.rcstatic.com/images/suppliers/flat/ocarrol_logo.gif" title="Ocarrol"/>
<h4 style="" xpath="1">Ocarrol</h4>
<a href="InfoPo=0&amp;driversAge=30&amp;os=1" onclick="GAQPush('cboxElement">Términos y condiciones</a>
</div>]

【讨论】:

  • 嗨安德烈,这个解决方案给了我结果 []
  • 必须是您的 BeautifulSoup 版本中的一些小错误。我的版本 beautifulsoup4==4.7.1lxml==4.3.3
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多