bs4 parent attrs python

时间:2017-08-28 20:45:35

标签: python web-scraping parent-child bs4

我刚开始使用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>

我现在要做的是找到日期字符串,但仅限于数据 - 某事物=&#34; 1&#34;父母而不是数据 - 某事=&#34; 0&#34;

我可以废弃所有日期:

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)

结果是空集。有什么不对或如何达到目标我的目标是最简单的解决方案?

P.S。这是完整代码的示例部分,这就是为什么我不使用Style,即使它没有出现在这里,但稍后会出现。

1 个答案:

答案 0 :(得分:1)

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

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

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

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