我在调用fake_useragent
这个包时出现fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached
错误,本文详细分析了这个错误并且给出了解决方案。
一、错误信息
这是报错的命令:
1 | from fake_useragent import UserAgent |
这是错误信息:
1 | Traceback (most recent call last): |
二、错误分析
依据报错,初步推断是网络超时,从网查阅资料得知,这个库会引用在线资源,经排查,fake_useragent\settings.py
相关配置如下:
1 | # -*- coding: utf-8 -*- |
其中,这个网站https://www.w3schools.com/browsers/default.asp
打不开,导致超时报错
依次查看其它url,发现都可以正常打开,其中CACHE_SERVER
是存储了所有UserAgent的json数据,再次观察其中DB这个变量,结合fake_useragent\fake.py
中的逻辑,判断这个变量应该是存储json数据的,所以大体逻辑应该是,首次初始化时,会自动爬取CACHE_SERVER
中的json数据,然后将其存储到本地,所以我们直接将json存到指定路径下,再次初始化时,应该就不会报错。
三、根本解决方案
1、查看指定路径
1 | import tempfile |
1 | /var/folders/6_/p67xz49j5wd5lzx7s2cz1cdr0000gn/T |
2、手动下载json文件
我们需要将CACHE_SERVER
的json数据保存为fake_useragent_0.1.11.json
,并放到目录/var/folders/6_/p67xz49j5wd5lzx7s2cz1cdr0000gn/T
中。
1 | wget https://fake-useragent.herokuapp.com/browsers/0.1.11 |
这时我们就会得到一个0.1.11
的文件,将文件名改为fake_useragent_0.1.11.json
:
1 | mv 0.1.11 fake_useragent_0.1.11.json |
最后将文件拷贝到临时目录中即可
1 | cp fake_useragent_0.1.11.json /var/folders/6_/p67xz49j5wd5lzx7s2cz1cdr0000gn/T/ |
当我们再次实例化 UserAgent 的时候,就会先读取本地的临时文件,这样实例化的时候就不会报错了。
注:如果CACHE_SERVER
不是https://fake-useragent.herokuapp.com/browsers/0.1.11
,请更新一下库pip install --upgrade fake_useragent
。
四、简单的解决方案——在实例化的时候指定一些参数
这里首先需要更新下库:
1 | pip install --upgrade fake_useragent |
- 如果不希望缓存数据库或不需要可写文件系统:
1 | ua = UserAgent(use_cache_server=False) |
- 如果不想使用宿主缓存服务器,可以禁用服务器缓存:
1 | ua = UserAgent(cache=False) |
- 忽略ssl验证
1 | ua = UserAgent(verify_ssl=False) |