![](https://bestproxy.cc/wp-content/uploads/2022/12/1671619557-1642519138-slider-jms.png)
目录
1、python爬虫代理
使用python爬虫高频率的访问一个固定的网站的话,容易触发该目的网站的反爬机制,将你对应的IP地址进行封禁,那么这个时候我们可以通过代理的方式,让目的网站无法识别到是哪一个IP地址访问的。
(1)检测网站
我们在测试的时候,如何知道我们是通过代理访问的呢?这个时候我们需要使用一个检测网站,地址如下:
这个网站就是专门用来做检测用的,他有多种访问形式,可以来返回我们所需要的不同信息;
它也提供了各种访问的demo,如下:
(2)有哪些好用的代理
如果可以自己购买几个IP地址,自己搭建代理是最合适的;当然了,也可以去选用第三方的,如下几个有收费的也有免费的,如果要保证可用性,当然是使用收费的更好了,因为免费的不止是你在用,有很多很多人都在用;
西刺免费代理IP:快代理:代理云:我们这里使用快代理的免费代理,界面如下:
(3)实操
上面我们了解了如何检测python使用是否使用代理,以及python爬虫使用什么代理,这两个问题了解之后,我们就要将其结合起来了。
(3.1)在没有使用代理之前输入:
from urllib import requestjier = request.urlopen(get)print(jier.read().decode(utf-8))输出:
{ "args": {}, "headers": { "Accept-Encoding": "identity", "Host": "httpbin.org", "User-Agent": "Python-urllib/3.9", "X-Amzn-Trace-Id": "Root=1-627fb6b9-12d3af8ce3e71b01c" }, "origin": "118.186.2.238", "url": "get"}可以看到输出的内容中有一个origin,这就是我们在没有使用代理前的IP地址;
(3.2)使用代理之后输入:
from urllib import requestjier = request.ProxyHandler({http: 183.236.123.242:8060})suner = request.build_opener(jier)Reqs = request.Request(get)Reqs_2 = suner.open(Reqs)print(Reqs_2.read().decode(utf-8))输出:
{ "args": {}, "headers": { "Host": "httpbin.org", "User-Agent": "Python-urllib/3.9", "X-Amzn-Trace-Id": "Root=1-627fb85c-64d4af1a3c691fd43e956e56" }, "origin": "183.236.123.242", "url": "get"}可以看到,返回信息中的origin就已经变成了我们的代理IP地址,说明我们使用代理是成功访问到目的地址了。
2、什么是cookie
我们知道,访问网站的时候大多数都是需要带cookie的,为什么要有这个呢?其实可以理解成我们在这个网站的临时身份证,为什么是说是临时的呢,因为cookie是存在有效期的,这个有效期各个网站都是不同的,要取决于这个网站本身。
而且,有很多网站都是需要登录才可以的,那么你使用用户名和密码进行登录,网站校验通过之后,就会给你返回一个cookie,这样子在你接下来的固定时间内,你再该网站的所有操作,都是携带着cookie来进行的。
我们通过上面的内容,对cookie有一个简单的认识之后,就了解下cookie都包含了什么吧:
Set-Cookie: NAME=VALUE;Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE参数示意:
NAME:cookie的名字VALUE:cookie的值Expires:cookie的过期时间,当超过该时间之后,这个cookie就失效了Path:cookie作用的路径Domain:cookie作用的域名,比如显示的是.baidu.com,就说明你可以访问这个父域名下的所有子域名,如果显示的是123.baidu.com,那就就表示你这个cookie只能访问这个子域名下的内容,当你切换不同域名的时候,你这个cookie就失效了SECURE:是否仅在https协议下起作用例如,我们访问百度的时候,cookie截图如下:
3、通过带上cookie的方式访问网站
当我们访问某些需要登录才能访问到指定用户名密码的时候,就需要我们携带cookie才能访问了,这个时候我们可以先用浏览器登录上,并访问下指定页面,检查下他携带的cookie信息是什么,然后将其cookie复制出来,放到我们的代码中,如下代码示例:
from urllib import requestHeader = { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36, Cookie: PSTM=; BAIDUID=AC8B00C7B94F89DC0D8C6E3BCB52FBD7:FG=1; BD_UPN=; BIDUPSID=64DE748DA60CC5B4B000AA40F5D2F473; BDUSS=HhvRVhKRDNwRWZaNDF2bXNjaVBhZEM1ekNabXo2d0RTdkNqenhHOWJ2UUg2aDFpRVFBQUFBJCQAAAAAAAAAAAEAAAD3dZZBz~G6ozEyMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdd9mEHXfZhN; BDUSS_BFESS=HhvRVhKRDNwRWZaNDF2bXNjaVBhZEM1ekNabXo2d0RTdkNqenhHOWJ2UUg2aDFpRVFBQUFBJCQAAAAAAAAAAAEAAAD3dZZBz~G6ozEyMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdd9mEHXfZhN; __yjs_duid=1_a2cd375ad77ef87a28cab899c31d; channel=baidusearch; BAIDUID_BFESS=C09C111CBB74B4F8DD06D1F4E9F9CF84:FG=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; baikeVisitId=85ec55f0-9bf5-4487-93d6-a3bb67c7a4d2; COOKIE_SESSION=616_1_5_4_19_1_0_0_4_1_0_0_2175_0_6_0___%7C9%_14_%7C9; RT="z=1&dm=baidu.com&si=58f12a03-e034-449a-822e-cb9&ss=l34lz0jl&sl=8&tt=ivy&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=1n2l&ul=1nd1&hd=1ne5"; BD_HOME=1; H_PS_PSSID=36426_36185_31660_36424_36167_34584_35978_36055_26350_36315; BA_HECTOR=2ha0ag252g8l852l7n1h7vfng0q}jier = request.Request(http://www.baidu.com, headers=Header)suner = request.urlopen(jier)print(suner.read().decode(utf-8))我这里只是示例,需要注意的是,并不是所有网站,都是通过携带cookie的形式来做校验的,有的也不仅仅是通过cookie,具体的还是要根据实际网站来做区分;
但是有一个问题,我们之前说过,cookie是存在有效期这么个概念的,那岂不是我们隔一会儿就需要修改代码?有没有别的处理方式呢?当然有了,下一篇中我们就介绍一种更加优雅的python自己处理cookie的方式。
至此,本文结束。
长按以识别二维码关注运维家~号:yunweijia0909
往期推荐
如何将不同linux服务器的目录内容进行双向同步
linux控制用户密码失效时间
01-docker系列-linux下的docker安装