Python爬虫携带Cookie,session会话保持,对于需要登录才能抓数据的处理方式

在做爬虫时,有的网站必须先登录才能访问到页面,爬这样的网页,就需要像请求中插入Cookie值,下面介绍3种方式

 

方式一:将Cookie插入Headers请求头

1,先登录成功一次,获取到携带登录信息的Cookie(需要手动)

拿CSDN举例,登录成功 -> 个人主页 -> 打开控制台 -> 刷新页面 -> 看到以自己用户名命名的文件 -> 复制cookie

2,携带cookie发请求

需要用到requests模块的get请求 

import requests

headers={

 'Cookie':'复制页面文件里的cookie值'

}

html=requests.get(url='',headers=headers).text

 

 

方式二:Cookies直接作为requests方法的参数

方式二与方式一都是通过携带Cookie来发请求,方式二直接调用requests的cookies参数,但是要求cookies是一个字典类型,所以要对从网上覆制下来的cookie值进行一些处理,cookie中都是键值对的形式,如:

uuid_tt_dd=10_19035893370-1578805336439-452978; dc_session_id=10_1578805336439.387381;

我们要将这样的一串字符串做成字典的形式首先要将它以“; ”分隔,注意两个值直接不仅有;符号,还有一个空格,所以是;+空格。分隔之后得到的格式为:键=值 ,再以=号分隔,取[0]为键,[1]为值,如下:

import requests

cookies="从网上覆制的cookie值"

cookies_dict={}

for i in cookies.split("; "):

   cookies_dict[i.splict('=')[0]] = i.splict('=')[1]

html=requests.get(url='',cookies=cookies_dict}

 

方式三:session会话保持

request模块提供了session类,来实现客户端和服务端的会话保持,操作方法如下:

1.实例化session对象

2.使用session.post()模拟登陆,此时将得到cookie,并保存到session中

3.再使用session.post()或session.get()方法请求页面时,不会提示需要登录,因为上一步已经将cookie保存到会话中了

 

人人网案例:

首页URL:http://www.renren.com/


 使用requests模拟登录人人网,获取请求的地址action:http://www.renren.com/PLogin.do

name="email",password="password"

使用session的posts方法做一次登录请求,将cookie保存在session会话里。

如下:

import requests

url='http://www.renren.com/PLogin.do'
session=requests.session()
data={
      'email':'',
      'password':''
}
session.post(url=url,headers=headers,data=data)
html=se.get(url=url,headers=headers).text

提示:现在很多网站都做了验证码机制,使用以上的方式可能行不通。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章