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

时间:2015-02-08 15:41:46

标签: python eclipse beautifulsoup scrape

这里的网页抓取新手。我成功地抓了一个网站,但是我遇到了一个问题。在文章类中通常只有一个'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'标签中的blah blah文本。目前我正在从p标签中抓取所有文本,因此对于大多数信息,我得到了所需的文本,但是当随机p标签出现时,我也刮掉了不相关的文本。它们也以随机顺序出现,因此使用“内容”不起作用。

我尝试过各种各样的汤.findAll,但是让我感到困惑的是那些改变网站号码的东西。有人可以提供解决方案吗?

提前致谢。

维克

2 个答案:

答案 0 :(得分: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>]

答案 1 :(得分:0)

我知道这已经过时了,但我发现它正在寻找一些东西......

如果您对列表而不是迭代器感到满意,那么您也可以使用CSS选择器(稍微轻松地#34;)

plist = soup.select('p[onclick]')