BeautifulSoup webscrape,使用随机 html 类隔离特定标签

问题描述 投票:0回答:2

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

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

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

<p> irrelevant text </p>

问题是我不知道如何仅获取“p onclick”标签,因为虽然网站始终相同,但“某些数字”位总是在变化。我只需要“p onclick”标签中的等等文字。目前,我正在从 p 标签中抓取所有文本,因此对于大多数信息,我获得了所需的文本,但是当随机 p 标签出现时,我也抓取了不相关的文本。它们也以随机顺序出现,因此使用“内容”不起作用。

我尝试过 soup.findAll 的各种组合,但令我困惑的是那些不断变化的网站号码。有人可以提供解决方案吗?

提前致谢。

维克

python eclipse web-scraping beautifulsoup
2个回答
0
投票

您可以指定

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>]

0
投票

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

如果您对列表而不是迭代器感到满意,您也可以使用 CSS 选择器来完成(并且稍微“更简单”)

plist = soup.select('p[onclick]')
© www.soinside.com 2019 - 2024. All rights reserved.