如何使用BeautifulSoup在包含<p>元素的表中找到第一个?

时间:2017-06-23 16:11:32

标签: python html parsing web-scraping beautifulsoup

我试图解析位于此页面http://www.bluenote.net/newyork/schedule/index.shtml的表格。我正在尝试获取当前正在播放的人的开始时间和乐队名称。我注意到表中包含p元素的第一个td是我正在寻找的。知道怎么回事吗?我尝试使用

soup.findAll("p") 

但我试图选择整个&#34; td&#34;包含那个&#34; p&#34;元件。

1 个答案:

答案 0 :(得分:2)

您可以使用生成器:

first_td = next(td for td in soup.find_all('td') if td.p)
#               ^           generator                  ^

find_all会产生所有<td>个标签。然后,我们按td.p过滤代码。这将返回p标记(假设有一个)。否则它将返回None。由于None真实性False,而对于标记对象,True,因此生成器将使用{枚举所有<td>标记{1}}标记。

我们致电<p>以获取这些元素中的第一个。如果不存在这样的元素,它将引发next(..)异常。

如果你想要所有这些标签,你可以使用列表理解:

StopIteration