if len(res.json()) == 0:
File "F:\python_spider\venv\Lib\site-packages\requests\models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
^^^^^^^^^^
原因分析:按照老师的代码进行爬取,程序报错。比如说某些电影,没有title或rank,就抓取不到,查看MongoDB compass,发现collection里有600条数据。
当在data字典中增加几个爬取的数据时时,比如types、actors、regions,程序也会报错,但在films这个collection中,会有460条数据。
查看报错信息,发现这个错误通常发生在 json.loads() 方法无法解析一个 JSON 字符串时。该错误消息表明这个 JSON 字符串是空的或者格式不正确,没有包含一个有效的 JSON 对象。
总体还是因为代码不够健壮,所以这里需要再增加try-except,再在里面执行 parse(url, params_next),
except:
print("this data is empyt")
parse(url, params_next)
这样,获得到866条数据了,虽然不完整,但确保证获取大部分的数据。
空指针异常是最常见的报错,在爬虫里,因为数据加载不出来,就会出现加载不出数据的情况,而且好像也挺常见的,在前面的实战章节中,也出现了这类问题。在爬虫这个领域中,除了try-catch,还有没有其他更好或通用的解决方案呢?如果对数据的完整性要求比较高,但每次总有数据丢失,这样虽然不会报错,但也满足不了业务需求,一般来说,这种情况会怎么处理?