【问题标题】:bs4 parent attrs pythonbs4父属性python
【发布时间】:2017-08-28 20:45:34
【问题描述】:

我刚开始用 Python 编码,我的朋友要求我在网络上查找特定数据的应用程序,并很好地表示它。 我已经找到了漂亮的网络,其中包含数据,我可以找到基本信息,但挑战是更深入。

在 Python 3.4 中使用 BS4 时,我已经达到了示例代码:

 <tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something6" something_id="6something0">
 <td class="text-center td_something">
 <div>
 <a href="something/126" target="_blank">Super String of Something</a>
 </div>
 </td>
 <td class="text-center">08/26 15:00</td>
 <td class="text-center something_status">
 <span class="something_status_something">Full</span>
 </td>
 </tr>
 <tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="0" something="1something4" something_id="6something7">
 <td class="text-center td_something">
 <div>
 <a href="something/146" target="_blank">Super String of Something</a>
 </div>
 </td>
 <td class="text-center">05/26 15:00</td>
 <td class="text-center something_status">
 <span class="something_status_something"></span>
 </td>
 </tr>

我现在要做的是找到日期字符串,但前提是父级的 data-something="1" 而不是 data-something="0"

我可以通过以下方式取消所有日期:

soup.find_all(lambda tag: tag.name == 'td' and tag.get('class') == ['text-center'] and not tag.has_attr('style'))

但它不检查父级。这就是我尝试的原因:

def KieMeWar(tag):
    return tag.name == 'td' and tag.parent.name == 'tr' and tag.parent.attrs == {"data-something": "1"} #and tag.get('class') == ['text-center'] and not tag.has_attr('style')
soup.find_all(KieMeWar)

结果是一个空集。出了什么问题或如何通过最简单的解决方案达到我的目标?

附:这是完整代码的示例部分,这就是我使用 not Style 的原因,即使它没有出现在这里但稍后会出现。

【问题讨论】:

  • 也许您可以通过 XPath 引用来实现。

标签: python web-scraping parent-child bs4


【解决方案1】:

BeautifulSoup 的findAllattrs kwarg,用于查找具有给定属性的标签

import bs4
soup = bs4.BeautifulSoup(html)
trs = soup.findAll('tr', attrs={'data-something':'1'})

这会找到所有具有data-something="1" 属性的tr 标记。之后,您可以遍历trs 并获取第二个td 标签以提取日期

for t in trs:
    print(str(t.findAll('td')[1].text))
    >>> 08/26 15:00

【讨论】:

  • 但是,在代码的其他部分是不同 'td's 下的另一个字符串,所以我也会有多个错误答案。我不会吗?还是非常感谢!无论如何,我都会尝试实施这种方法进行测试。
  • 效果很好。现在我只需要弄清楚为什么 :) 再次感谢!
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多