python - 如何使用 BeautifulSoup 搜索标签列表,列表中的一个项目具有属性?

标签 python html web-scraping beautifulsoup

有谁知道如何在 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 pli 标签trid 存在,那么下面的方法会更合适:

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/

相关文章:

python - Seaborn 箱线图沿 x 轴错误移动

python - 如何在 python 中以 5 分钟的间隔存储时间戳

html - 使用 css 排列图像列表

javascript - 调整窗口大小时如何让我的网站停留

python - 火星 2020 网页抓取

python - 碎片 : UNFORMATTABLE OBJECT WRITTEN TO LOG

python - Pandas 无法拆分多个星号

javascript - 如何使用 JavaScript 打开 anchor 上下文菜单?

python - Scrapy 选择器不适用于 Splash 响应

python - Selenium Python = 在无限滚动中单击按钮 "ShowMore"时出现问题