Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用BeautifulSoup搜索标签列表,列表中的一项具有属性?_Python_Html_Web Scraping_Beautifulsoup - Fatal编程技术网

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

Python 如何使用BeautifulSoup搜索标签列表,列表中的一项具有属性?,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,有人知道如何在python中使用bs4来搜索多个标记,其中一个标记需要一个属性吗 例如,要搜索具有属性的一个标记的所有匹配项,我知道可以执行以下操作: tr\u list=soup\u对象。find\u all('tr',id=True) 我知道我也能做到这一点: tag\u list=soup\u对象。查找所有(['a','b','p','li']) 但我不知道如何组合这两个语句,理论上这会给我一个列表,按照所有html标记的出现顺序,每个“tr”标记都有一个id html代码段如下所示:

有人知道如何在python中使用bs4来搜索多个标记,其中一个标记需要一个属性吗

例如,要搜索具有属性的一个标记的所有匹配项,我知道可以执行以下操作:

tr\u list=soup\u对象。find\u all('tr',id=True)

我知道我也能做到这一点:

tag\u list=soup\u对象。查找所有(['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>

作为文本的时间
标题作为文本
作为文本的数字

  • 更多\u文本\u文本\u文本 更多\u文本\u文本\u文本 更多\u文本\u文本\u文本 更多\u文本\u文本\u文本
  • 更多\u文本\u文本\u文本
    • 更多\u文本\u文本\u文本

提前谢谢大家的帮助

我建议您将
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
锂
锂
锂

注意,如果您实际上试图获取
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_时间作为文本
一段文字
b a_标题作为_文本

您能举一个您正在尝试刮取的html的例子吗?谢谢你,这是一个受保护的网站,我不想有任何麻烦,所以我在文本中加入了一些明显的占位符:a_time_text a_headline_text a_text a_number_text
  • more_text_text_textmore_text_text_text_text_textmore_text_text_text_text_text_text_text
  • more_text_text_text_text_text_text_text
我会使用lambda@SammyDoodle,如果您以格式化的方式在问题中添加html会更好。