Python 从网站提取文本时出错:AttributeError';非类型';对象没有属性';获取文本';
我正在抓取这个网站,并使用Python 从网站提取文本时出错:AttributeError';非类型';对象没有属性';获取文本';,python,tags,Python,Tags,我正在抓取这个网站,并使用获取“标题”和“类别”作为文本。get_text().strip() 我在使用相同的方法提取“作者”作为文本时遇到了问题 我如何改进代码以提取“作者”姓名?你很接近了——我推荐几件事。首先,我建议仔细查看HTML——在本例中,作者姓名实际上位于ul中,其中每个li包含一个span,其中itemprop是'name'。然而,并不是所有的文章都有作者的名字。在本例中,使用当前代码,对links.find('div',{'itemprop':'name'})的调用将返回Non
获取“标题”和“类别”作为文本。get_text().strip()
我在使用相同的方法提取“作者”作为文本时遇到了问题
我如何改进代码以提取“作者”姓名?你很接近了——我推荐几件事。首先,我建议仔细查看HTML——在本例中,作者姓名实际上位于ul
中,其中每个li
包含一个span
,其中itemprop
是'name'
。然而,并不是所有的文章都有作者的名字。在本例中,使用当前代码,对links.find('div',{'itemprop':'name'})的调用将返回None
<当然,code>None
没有属性get\u text
。这意味着该行将抛出一个错误,在本例中,这只会导致没有值附加到data2
'author'
列表中。我建议将作者存储在如下列表中:
authors = []
ul = links.find('ul', itemprop='creator')
for author in ul.find_all('span', itemprop='name'):
authors.append(author.text.strip())
data2['authors'].append(authors)
这可以处理没有作者的情况,因为“作者”是一个空列表
作为旁注,将代码放在
try:
...
except:
pass
构造通常被认为是糟糕的实践,这正是您现在看到的原因。默默地忽略错误会使您的程序看起来运行正常,而事实上,许多事情都可能出错。至少,将错误信息打印到标准输出是个好主意。即使只是做这样的事情也比什么都不做要好:
try:
...
except Exception as exc:
print(exc.__class__.__name__, exc)
然而,对于调试来说,通常也需要有完整的回溯。为此,您可以使用回溯
模块
import traceback
try:
...
except:
traceback.print_exc()
而不是使用条带方法。创建一个包含所有项目的变量,然后使用
for
循环并使用.text
author = links.findAll('span', {"itemprop": "name"})
for i in author:
data2["author"].append(i.text) #??????
印刷品
“作者”:[“马克·扎斯特罗”、“芭芭拉·穆尔曼”、“特里·C·琼斯”、“彼得·德巴罗斯·达姆加德”、“莫顿·E·阿伦托夫”、“伊丽娜·舍夫尼娜”、“安德烈·洛文”、“艾玛·乌斯马诺娃”等等
我们需要更多的细节,而不是“它不起作用”。实际发生了什么,以及应该发生什么?如果收到错误消息,请发布准确、完整的错误消息,包括堆栈跟踪。try:…Exception:pass
隐藏了有用的异常信息。
import traceback
try:
...
except:
traceback.print_exc()
author = links.findAll('span', {"itemprop": "name"})
for i in author:
data2["author"].append(i.text) #??????