刮刀的逻辑流程:从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篇文章。
我遇到的问题是什么?谢谢!
答案 0 :(得分:1)
您没有显示self.html_element
和self.css_selector
是什么,但很明显article.find
方法找不到它们,并返回None
。