有谁知道如何在 python 中使用 bs4 来搜索多个标签,其中一个标签需要一个属性?
例如,要搜索具有某个属性的一个标签的所有出现位置,我知道我可以这样做:
tr_list = soup_object.find_all('tr', id=True)
我知道我也可以这样做:
tag_list = soup_object.find_all(['a', 'b', 'p', 'li'])
但我不知道如何组合这两个语句,理论上这会给我一个列表,按照所有这些 html 标签的出现顺序,每个“tr”标签都有一个 id。
html 片段如下所示:
<tr id="uniqueID">
<td nowrap="" valign="baseline" width="8%">
<b>
A_time_as_text
</b>
</td>
<td class="storyTitle">
<a href="a_link.com" target="_new">
some_text
</a>
<b>
a_headline_as_text
</b>
a_number_as_text
</td>
</tr>
<tr>
<td>
<br/>
</td>
<td class="st-Art">
<ul>
<li>
more_text_text_text
<strong>
more_text_text_text
<font color="228822">
more_text_text_text
</font>
</strong>
more_text_text_text
</li>
<li>
more_text_text_text
<ul>
<li>
more_text_text_text
</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
</tr>
提前感谢所有帮助!
最佳答案
我建议您将 tr
添加到所需的标签列表,然后检查循环中是否存在 id
属性:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
for tag in soup.find_all(['a', 'b', 'p', 'li', 'tr']):
if tag.name != 'tr' or (tag.name == 'tr' and tag.get('id')):
print tag.name
对于您的 html,这将显示:
tr
b
a
b
li
li
li
请注意,如果您实际上是在尝试获取位于 a 内的 a
b
p
和 li
标签tr
和 id
存在,那么下面的方法会更合适:
for tr in soup.find_all('tr', id=True):
for tag in tr.find_all(['a', 'b', 'p', 'li']):
print tag.name, tag.get_text(strip=True)
这会给你:
b A_time_as_text
a some_text
b a_headline_as_text
关于python - 如何使用 BeautifulSoup 搜索标签列表,列表中的一个项目具有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48534197/