0

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

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

这适用于大多数提要,但在两个值得注意的例外情况(福布斯和 Google 官方博客)上,在调用 get_text() 时会失败并显示以下消息:

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

self.raw_html这也让我感到奇怪,因为当类初始化时,通过 len(self.raw_html) 验证获取福布斯 XML 提要时当前有 29 篇文章。

谷歌官方博客返回:

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

实际上有 25 篇文章。

我遇到什么问题?谢谢!

4

1 回答 1

1

您没有显示什么self.html_elementself.css_selector是,但该方法似乎很清楚该article.find方法没有找到它们并返回None.

于 2012-06-29T01:18:08.073 回答