使用BeautifulSoup排除不需要的findAll结果

时间:2013-10-13 23:34:27

标签: python beautifulsoup screen-scraping

使用BeautifulSoup,我的目的是抓取与此HTML钩子相关的文本:

<p class="review_comment">

所以,使用如下的简单代码,

content = page.read()  
soup = BeautifulSoup(content)  
results = soup.find_all("p", "review_comment")

我很高兴解析生活在这里的文字:

<p class="review_comment">
    This place is terrible!</p>

坏消息是soup.find_all每30次左右获得一次匹配,它也匹配并抓取我真正不想要的东西,这是用户以前更新的旧评论:

<p class="review_comment">
    It's 1999, and I will always love this place…  
<a href="#" class="show-archived">Read more &raquo;</a></p>

在我试图排除这些旧的重复评论时,我尝试了大量的想法。

  • 我一直试图改变soup.find_all()电话中的论点 在 <a href="#" class="show-archived">Read more &raquo;</a>
  • 之前明确排除之前的任何文字
  • 我淹没在正则表达型匹配的边缘,但没有成功。
  • 我似乎无法利用class="show-archived"属性。

任何想法都将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:9)

这是你在寻找什么?

for p in soup.find_all("p", "review_comment"):
    if p.find(class_='show-archived'):
        continue
    # p is now a wanted p