龙空技术网

Python爬虫伪装,请求头User-Agent池,和代理IP池搭建使用

运维笔记ywbj 687

前言:

现在姐妹们对“python爬虫伪装浏览器”可能比较关怀,小伙伴们都想要知道一些“python爬虫伪装浏览器”的相关文章。那么小编也在网上汇集了一些有关“python爬虫伪装浏览器””的相关文章,希望各位老铁们能喜欢,我们快快来了解一下吧!

一、前言

在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据或者频繁地访问该网站多次时还可能面临ip被禁,所以这个时候我们通常就可以找一些代理ip,和不用的浏览器来继续爬虫测试。下面就开始来简单地介绍一下User-Agent池和免费代理ip池。

二、User-Agent池

User-Agent 就是用户代理,又叫报头,是一串字符串,相当于浏览器的身份证号,我们在利用python发送请求的时候,默认为: python-requests/2.22.0,所以我们在利用爬虫爬取网站数据时,频繁更换它可以避免触发相应的反爬机制。

构建User-Agent池,这里介绍两种方法:1,手动构造随机函数。2,第三方库fake-useragent

方法1:构造随机函数

自己手动编写User-Agent池,然后随机获取其中一个就行了。

def get_ua():    import random    user_agents = [        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',		'Opera/8.0 (Windows NT 5.1; U; en)',		'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',		'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',		'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ',		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',		'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',		'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',		'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',		'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',		'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',    ]    user_agent = random.choice(user_agents) # 随机抽取对象    return user_agent# 调用get_ua()

至于,在哪里找这些浏览器,网上一大堆,复制过来即可。

实际环境调用随机User-Agent池

import requestsdef get_page(url):    ua = get_ua()    headers = {'User-Agent': ua}    response = requests.get(url=url, headers=headers)    print(response.text)if __name__ == '__main__':    get_page(';)

方法2: fake-useragent 库自动生成

注: 此库在2018年已经停止更新,版本目前停止在0.1.11,所以生成的浏览器版本都比较低。如果有网站检测浏览器版本号大小(范围)的话,就可能会被检测到。

安装:

pip install fake-useragent

调用第三方库,生成指定浏览器的user-agent

from fake_useragent import UserAgentua = UserAgent()ua.ie# Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);ua.msie# Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'ua['Internet Explorer']# Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)ua.opera# Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11ua.chrome# Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'ua.google# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13ua['google chrome']# Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11ua.firefox# Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1ua.ff# Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1ua.safari# Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25# and the best one, random via real world browser usage statisticua.random

官方文档:

实际示例代码:

from fake_useragent import UserAgentimport requestsua=UserAgent()#请求的网址url=";#请求头headers={"User-Agent":ua.random}#请求网址response=requests.get(url=url,headers=headers)#响应体内容print(response.text)#响应状态信息print(response.status_code)#响应头信息print(response.headers)

三、IP代理池

开源IP代理池,这里推荐两个:

这里用第二个测试,使用人数更多,而且一直在更新。

1:下载启动

Linux下载

git clone git@github.com:jhao104/proxy_pool.git#或者git clone 

使用docker compose启动

#进入目录cd proxy_pool/#启动代理池docker compose up -d

启动web服务后, 默认配置下会开启 的api接口服务:

api:

/get :GET, 随机获取一个代理 ,可选参数: ?type=https 过滤支持https的代理/pop :GET, 获取并删除一个代理, 可选参数: ?type=https 过滤支持https的代理/all :GET, 获取所有代理 ,可选参数: ?type=https 过滤支持https的代理/count :GET, 查看代理数量,/delete :GET, 删除代理, ?proxy=host:ip

访问浏览器测试,我这里IP,192.168.152.100

2:爬虫使用

如果要在爬虫代码中使用的话, 可以将此api封装成函数直接使用,例如

import requestsdef get_proxy():    return requests.get(";).json()def delete_proxy(proxy):    requests.get("{}".format(proxy))# your spider codedef getHtml():    # ....    retry_count = 5    proxy = get_proxy().get("proxy")    while retry_count > 0:        try:            html = requests.get(';, proxies={"http": "http://{}".format(proxy)})            # 使用代理访问            return html        except Exception:            retry_count -= 1    # 删除代理池中代理    delete_proxy(proxy)    return None

更多使用方法,参考官方文档:

以上是基本使用方法,都是免费的,质量有限,如需要付费的。

付费代理推荐: luminati-china. 国外的亮数据BrightData(以前叫luminati)被认为是代理市场领导者,覆盖全球的7200万IP,大部分是真人住宅IP,成功率扛扛的。

标签: #python爬虫伪装浏览器