python爬虫-05-python爬虫代理,python爬虫如何携带cookie呢,本文带你掌握

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安装