您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页python爬虫-使用cookie登录

python爬虫-使用cookie登录

来源:步遥情感网
python爬⾍-使⽤cookie登录

前⾔:

什么是cookie?

Cookie,指某些⽹站为了辨别⽤户⾝份、进⾏session跟踪⽽储存在⽤户本地终端上的数据(通常经过加密)。

⽐如说有些⽹站需要登录后才能访问某个页⾯,在登录之前,你想抓取某个页⾯内容是不允许的。那么我们可以利⽤Urllib库保存我们登录的Cookie,然后再抓取其他页⾯,这样就达到了我们的⽬的。

⼀、Urllib库简介

Urllib是python内置的HTTP请求库,官⽅地址:https://docs.python.org/3/library/urllib.html包括以下模块:

>>>urllib.request 请求模块>>>urllib.error 异常处理模块>>>urllib.parse url解析模块

>>>urllib.robotparser robots.txt解析模块

⼆、urllib.request.urlopen介绍

uurlopen⼀般常⽤的有三个参数,它的参数如下:

urllib.requeset.urlopen(url,data,timeout)

简单的例⼦:

1、url参数的使⽤(请求的URL)

response = urllib.request.urlopen('http://www.baidu.com')

2、data参数的使⽤(以post请求⽅式请求)

data= bytes(urllib.parse.urlencode({'word':'hello'}), encoding='utf8')response= urllib.request.urlopen('http://www.baidu.com/post', data=data)

3、timeout参数的使⽤(请求设置⼀个超时时间,⽽不是让程序⼀直在等待结果)

response= urllib.request.urlopen('http://www.baidu.com/get', timeout=4)

三、构造Requset

1、数据传送POST和GET(举例说明:此处列举登录的请求,定义⼀个字典为values,参数为:email和password,然后利⽤urllib.parse.urlencode⽅法将字典编码,命名为data,构建request时传⼊两个参数:url、data。运⾏程序,即可实现登陆。)GET⽅式:直接以链接形式访问,链接中包含了所有的参数。

LOGIN_URL= \"http://*******/postLogin/\" values={'email':'*******@***com','password':'****'} data=urllib.parse.urlencode(values).encode() geturl = LOGIN_URL+ \"?\"+data request = urllib.request.Request(geturl)

POST⽅式:上⾯说的data参数就是⽤在这⾥的,我们传送的数据就是这个参数data。

LOGIN_URL='http://******/postLogin/'

values={'email':'*******@***.com','password':'*****'}data=urllib.parse.urlencode(values).encode()request=urllib.request.Request(URL,data)

2、设置Headers(有些⽹站不会同意程序直接⽤上⾯的⽅式进⾏访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的⼯作,我们需要设置⼀些Headers的属性)

上图可以看到该请求的headers,这个头中包含了许多信息:Cache、Client、Transport等等。其中,agent就是请求的⾝份,如果没有写⼊请求⾝份,那么服务器不⼀定会响应,所以可以在headers中设置agent。

举例:(这个例⼦只是说明了怎样设置headers)

user_agent = r'Mozilla/5.0 (Windows NT 6.1; Win; x; rv:55.0) Gecko/20100101 Firefox/55.0'headers={'User-Agent':user_agent,'Connection':'keep-alive'}request=urllib.request.Request(URL,data,headers)

四、使⽤cookie登录

1、获取登录⽹址

浏览器输⼊需要登录的⽹址:'http://*****/login'(注意:这个并⾮其真实站点登录⽹址),使⽤抓包⼯具fiddler抓包(其他⼯具也可)找到登录后看到的request。此处确定需要登录的⽹址为:'http://*****/postLogin/'

2、查看要传送的post数据

找到登录后的request中有webforms的信息,会列出登录要⽤的post数据,包括Email,password,auth。

3、查看headers信息

找到登录后看到的request的headers信息,找出User-Agent设置、connection设置等

4、开始编码,使⽤cookie登录该⽹站

import urllib.error, urllib.request, urllib.parseimport http.cookiejar

LOGIN_URL = 'http://******/postLogin'

#get_url为使⽤cookie所登陆的⽹址,该⽹址必须先登录才可get_url = 'https://*****/pending'

values = {'email':'*****','password':'******','auth':'admin'}postdata = urllib.parse.urlencode(values).encode()

user_agent = r'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36' \\ r' (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'headers = {'User-Agent':user_agent, 'Connection':'keep-alive'}#将cookie保存在本地,并命名为cookie.txtcookie_filename = 'cookie.txt'

cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)handler = urllib.request.HTTPCookieProcessor(cookie_aff)opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)try:

response = opener.open(request)except urllib.error.URLError as e: print(e.reason)

cookie_aff.save(ignore_discard=True, ignore_expires=True)for item in cookie_aff:

print('Name ='+ item.name) print('Value ='+ item.value)#使⽤cookie登陆get_url

get_request = urllib.request.Request(get_url,headers=headers)get_response = opener.open(get_request)print(get_response.read().decode())

5、反复使⽤cookie登录

(上⾯代码中我们保存cookie到本地了,以下代码我们能够直接从⽂件导⼊cookie进⾏登录,不⽤再构建request了)

import urllib.request, urllib.parseimport http.cookiejar

get_url = 'https://******/pending'cookie_filename = 'cookie.txt'

cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)

cookie_aff.load(cookie_filename,ignore_discard=True,ignore_expires=True)handler = urllib.request.HTTPCookieProcessor(cookie_aff)opener = urllib.request.build_opener(handler)#使⽤cookie登陆get_url

get_request = urllib.request.Request(get_url)get_response = opener.open(get_request)print(get_response.read().decode())

以上

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务