Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从网站提取文本时出错:AttributeError';非类型';对象没有属性';获取文本';_Python_Tags - Fatal编程技术网

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) #??????