Web scraper为某些文章返回NoneType对象

时间:2012-06-29 01:15:26

标签: python beautifulsoup

刮刀的逻辑流程:从XML Feed中提取的文章链接放入名为self.raw_html的列表中。然后调用以下[简化]方法来过滤掉文章所在的容器并从给定文章中删除文本:

def fetch_article_contents(self):
    for article in self.raw_html:
        self.css_selector_type == 'class':
        soup = article.find(self.html_element,
                            self.css_selector)
        soup = soup.get_text()
        self.article_html.append(soup)
    return self.article_html

这适用于大多数Feed,但是在调用get_text()时,两个值得注意的豁免(Forbes和Google官方博客)失败并显示以下消息:

AttributeError: 'NoneType' object has no attribute 'get_text'

我调试的第一个逻辑步骤是查看返回NoneType对象的内容,因此我在print type(soup)之前找到了soup = soup.get_text()。我找到了:

<class 'bs4.element.Tag'> (25 times, condensed to save space)
<type 'NoneType'>

这也让我觉得很奇怪,因为当这个类被初始化时,当获取由len(self.raw_html)验证的Forbes XML feed时,self.raw_html中有29篇文章。

Google官方博客返回:

<class 'bs4.element.Tag'> (just once this time)
<type 'NoneType'>

实际上有25篇文章。

我遇到的问题是什么?谢谢!

1 个答案:

答案 0 :(得分:1)

您没有显示self.html_elementself.css_selector是什么,但很明显article.find方法找不到它们,并返回None