在做爬虫时,有的网站必须先登录才能访问到页面,爬这样的网页,就需要像请求中插入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
提示:现在很多网站都做了验证码机制,使用以上的方式可能行不通。