请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

豆瓣爬取报错,数据爬取不完整

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,还有没有其他更好或通用的解决方案呢?如果对数据的完整性要求比较高,但每次总有数据丢失,这样虽然不会报错,但也满足不了业务需求,一般来说,这种情况会怎么处理?

正在回答

1回答

如果对数据完整程度要求高的话,可以对数据是否成功获取做while判定 多次获取,如果超过最大次数 则终止

1 回复 有任何疑惑可以回复我~
  • 提问者 979811597 #1
    好的,谢谢老师。在这个案例中,有没有具体的代码?我的理解是在外部再套一个while循环,参数传一个flag,判断获取数据的长度是否与需要获取的长度一致,如果一致,则开始往MongoDB里写入数据,并且令flag =false,退出循环;不一致,则再爬取数据,知道超过最大次数。再定义一个变量count,记录爬取的次数,比如count大于10,则也令flag=false,退出循环。不知道我的理解是否正确。
    回复 有任何疑惑可以回复我~ 2023-04-02 23:17:37
问题已解决,确定采纳
还有疑问,暂不采纳
Python 分布式爬虫与 JS 逆向进阶实战
  • 参与学习       99    人
  • 解答问题       26    个

20+ 案例 & 可接单级项目,全面提升爬虫实战能力

了解课程
意见反馈 帮助中心 APP下载
官方微信