bs4 父属性 python
bs4 parent attrs python
我刚开始在 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)
结果为空集。有什么问题或如何使用最简单的解决方案达到我的目标?
P.S。这是完整代码的示例部分,这就是为什么我不使用 Style 的原因,即使它没有出现在这里但稍后会出现。
BeautifulSoup 的 findAll
有 attrs
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
我刚开始在 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)
结果为空集。有什么问题或如何使用最简单的解决方案达到我的目标?
P.S。这是完整代码的示例部分,这就是为什么我不使用 Style 的原因,即使它没有出现在这里但稍后会出现。
BeautifulSoup 的 findAll
有 attrs
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