抓取器的逻辑流程:从 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 篇文章。
我遇到什么问题?谢谢!