Python3 fake_useragent 模块的使用和报错解决方案

摘要:
当使用Python作为爬虫时,我们需要伪装头部信息以欺骗网站的反爬虫策略。Python中的第三方模块fakes_useragent很好地解决了这个问题。它将向我们返回一个随机封装的报头信息。我们可以直接使用它来生成_用户代理使用和安装fakes _ useragentpipinstallfake _ useragent示例:fromfake_ UseragentimportUserAgent#instance

在使用 Python 做爬虫的时候,我们需要伪装头部信息骗过网站的防爬策略,Python 中的第三方模块 fake_useragent 就很好的解决了这个问题,它将给我们返回一个随机封装了好的头部信息,我们直接使用即可

fake_useragent 的使用
安装 fake_useragent

pip install fake_useragent

示例:

from fake_useragent import UserAgent

# 实例化 UserAgent 类
ua = UserAgent()

# 对应浏览器的头部信息
print(ua.ie)
print(ua.opera)
print(ua.chrome)
print(ua.firefox)
print(ua.safari)

# 随机返回头部信息,推荐使用
print(ua.random)

运行结果:

(adnice) adnice:Downloads zhangyi$ python3 fake.py
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)
Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36

fake_useragent 报错及解决方案
报错信息:

socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "d:programdataanaconda3libsite-packagesfake_useragentutils.py", lin
e 166, in load
verify_ssl=verify_ssl,
File "d:programdataanaconda3libsite-packagesfake_useragentutils.py", lin
e 122, in get_browser_versions
verify_ssl=verify_ssl,
File "d:programdataanaconda3libsite-packagesfake_useragentutils.py", lin
e 84, in get
raise FakeUserAgentError('Maximum amount of retries reached')
fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached

首先找出关键报错信息:

fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached

大概意思是:这个模块尝试请求一个东西已达到最大重试次数

打开这个模块的源码进行查看发现这个库会引用在线资源,所以这个模块是进行几次尝试请求一个网站的 Json 数据,但是因为各种原因请求超时,所以就会报这个错误

fake_useragentsettings.py

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import os
import tempfile

__version__ = '0.1.11'

DB = os.path.join(
tempfile.gettempdir(),
'fake_useragent_{version}.json'.format(
version=__version__,
),
)

CACHE_SERVER = 'https://fake-useragent.herokuapp.com/browsers/{version}'.format(
version=__version__,
)

BROWSERS_STATS_PAGE = 'https://www.w3schools.com/browsers/default.asp'

BROWSER_BASE_PAGE = 'http://useragentstring.com/pages/useragentstring.php?name={browser}' # noqa

BROWSERS_COUNT_LIMIT = 50

REPLACEMENTS = {
' ': '',
'_': '',
}

SHORTCUTS = {
'internet explorer': 'internetexplorer',
'ie': 'internetexplorer',
'msie': 'internetexplorer',
'edge': 'internetexplorer',
'google': 'chrome',
'googlechrome': 'chrome',
'ff': 'firefox',
}

OVERRIDES = {
'Edge/IE': 'Internet Explorer',
'IE/Edge': 'Internet Explorer',
}

HTTP_TIMEOUT = 5

HTTP_RETRIES = 2

HTTP_DELAY = 0.1

解决方案:
首先第一步要进行更新 fake_useragent

pip install --upgrade fake_useragent

1. 在实例化的时候指定一些参数
禁用服务器缓存

ua = UserAgent(use_cache_server=False)

不缓存数据

ua = UserAgent(cache=False)

忽略ssl验证

ua = UserAgent(verify_ssl=False)

一般的话,通过上述解决方案都能解决了,但是我就比较悲催了,还是没解决…

2. 使用临时 Json 文件
在 fake_useragentsettings.py 发现了几个 URL,其中有一些是打不开的,所以,我们将能打开的 URL 的 Json 文件保存在本地

wget https://fake-useragent.herokuapp.com/browsers/0.1.11

这时我们就会得到一个 0.1.11 的文件,将文件名改为 fake_useragent_0.1.11.json

mv 0.1.11 fake_useragent_0.1.11.json

然后找到我们的临时文件目录(每个系统都不一样,例如 Ubuntu 在 /tmp 下)

(edison) adnice:T zhangyi$ python3
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> tempfile.gettempdir()
'/var/folders/6_/p67xz49j5wd5lzx7s2cz1cdr0000gn/T'
>>>

最后将文件拷贝到临时目录中即可

cp fake_useragent_0.1.11.json /var/folders/6_/p67xz49j5wd5lzx7s2cz1cdr0000gn/T/

当我们再次实例化 UserAgent 的时候,就会先读取本地的临时文件,这样实例化的时候就不会报错了

参考文章:https://blog.csdn.net/huiyanshizhu/article/details/84952093
————————————————
版权声明:本文为CSDN博主「极客点儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yilovexing/article/details/89044980

免责声明:文章转载自《Python3 fake_useragent 模块的使用和报错解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle V$SESSION详解docker中mysql安装,并使用宿主机ip远程登录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

手写RPC框架

https://www.bilibili.com/video/av23508597?from=search&seid=6870947260580707913 https://github.com/Rainyn/zg-jack-soa https://blog.csdn.net/roysaliencydetection/article/details...

Arduino学习笔记 (二) -- 常见板型

1、arduino uno r3(官方版) ¥24左右   https://item.taobao.com/item.htm?spm=a1z09.2.0.0.25212e8d9xKsT9&id=43741271843&_u=h1118gki4add     资料地址:http://pan.baidu.com/s/1iVIc6   资料:h...

网易 UI 自动化工具 Airtest 浅用记录

一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架 同时也支持原生Android App 的基于元素识别的UI自动化测试. 本文主要使用目的是做安卓原生App的元素UI自动化. 二 资源索引 官方资源 网易游戏新开源的 UI 自动化测试项目 [Airtest Project]Airtest官...

goland上gin无代码自动提示

参考: https://blog.csdn.net/wang2dog/article/details/106051796 https://blog.csdn.net/wang2dog/article/details/106051796 本地用2021.1版,和参考处略有不同 file -> settings-> Go-> Go Modul...

node 访问第三方API

1.安装request模块 npm install request --save 基本形式 //request(options,callback) request({ url: url,//请求路径 method: "POST",//请求方式,默认为get headers: {//设置请求头 "conte...

Google Drive 里的文件下载的方法

Google Drive 里并不提供创建直接下载链接的选项,但是可以通过小小的更改链接形式就能把分享的内容保存到本地。例如,一份通过 Google Drive 分享的文件链接形式为: https://drive.google.com/file/d/FILE_ID/edit?usp=sharing 如果将其改为下面修改版的形式,然后再通过浏览器打开,就会直...