这里是网络抓取的新手。我已经成功地抓取了一个网站,但是我遇到了一个问题。在文章类中通常只有一个“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 的各种组合,但令我困惑的是那些不断变化的网站号码。有人可以提供解决方案吗?
提前致谢。
维克
您可以指定
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 选择器来完成(并且稍微“更简单”)
plist = soup.select('p[onclick]')