BeautifulSoup webscrape,随机分离特定标签 html class

BeautifulSoup webscrape, isolate specific tag with random html class

这里是网络抓取的新手。我已经成功地抓取了一个网站,但是我遇到了一个问题。在文章 class 中通常只有一个 'p' 标签,但有时在一篇文章 class 中随机会有两个或三个 'p' 标签和一些不相关的文本。我想要的标签总是这样显示:

<p onclick="window.location.href = 'https://www.blahblah.com/somenumbers'">
some blah blah text
</p>

而其他随机出现的 'p' 标签仅显示为

<p> irrelevant text </p>

问题是我不知道如何只抓取 'p onclick' 标签,因为虽然网站总是一样,但 'some numbers' 位总是在变化。我只需要 'p onclick' 标签中的 blah blah 文本。目前我正在从 p 标签中抓取所有文本,因此对于大部分信息我得到了所需的文本,但是当随机 p 标签出现时我也抓取了不相关的文本。它们也以随机顺序出现,因此使用 'content' 不起作用。

我尝试了 soup.findAll 的各种组合,但让我感到困惑的是那些不断变化的网站号码。谁能提供解决方案?

提前致谢。

维克

您可以指定 find_all 标签必须具有非空 onclick 属性和正则表达式,examples 在文档中给出。

针对您的情况:

>>> from bs4 import BeautifulSoup
>>> import re
>>> 
>>> soup = BeautifulSoup('<p> blabla</p> and <p onclick="js action">blabla</p>')
>>> soup.find_all('p', onclick=re.compile('.'))
[<p onclick="js action">blabla</p>]

我知道这很旧,但我发现它正在寻找一些东西...

如果您对列表而不是迭代器感到满意,您也可以使用 CSS 选择器

来实现(稍微 "easier")
plist = soup.select('p[onclick]')