人人网(cookie登录)
有时候,我们在爬取一些网页之前必需要登录该网站,比如说我想爬取我的人人网主页内容。
1、打开:www.renren.com
2、输入用户名和密码,登录网站18679030315
3、个人首页,如下图:
那么直接请求:http://www.renren.com/964508591/profile 可不可以呢?我们试一下。
打印出来的东西没有获取到个人信息,通过上述代码,我们请求到的数据其实是人人网首页的数据,这跟我们“平时浏览一些内容的时候,网页自动跳转到登录页”的情况是一样的。
那么如何在爬取“个人主页”的信息呢?这个时候我们需要加一些身份信息,在哪儿加?在Cookie。Cookie中保存了用户的登录状态。
复制Cookie信息,添加到headers中,然后再发起请求:
代码:
输出结果:
将显示个人信息,表示请求到我想要的数据了。
代码如下:
import requests # 定义爬取url地址 base_url = 'http://www.renren.com/964508591/profile' # 定义headers,cookie保存了登录信息(用户名和密码) headers = { "Cookie": "anonymid=jsfnsdta-9wkx8y; " "depovince=GW; " "jebecookies=8b9ae51c-9f33-4411-91e1-8cf089c4038b|||||; " "_r01_=1; " "JSESSIONID=abcSP3j-rLG5T4RFC1tKw; " "ick_login=3aa429d9-fef7-4f32-87f0-6bed6e39881a; " "_de=5F71EE4FAB787F2D9124C42004FCABA0; " "p=9f3825923c315bb6a9600ef5179d781f1; " "first_login_flag=1; " "ln_uact=18679030315; " "ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; " "t=c516b899cbe52eb456b80bd3a71771611; " "societyguester=c516b899cbe52eb456b80bd3a71771611; id=964508591; " "xnsid=ec298a5b; " "ver=7.0; " "loginfrom=null; " "jebe_key=0c6ad138-7b82-45f2-98af-653a8c1fbd41%7C8562fb69c05d6f5ab11983a626d37548%7C1550816017179%7C1%7C1550816017961; " "wp_fold=0" } # 发起携带cookie的请求 response = requests.get(base_url, headers=headers) print(response.text)
获取Cookies 和 Sission来请求
1、Cookies
如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:
代码如下:
import requests # 定义爬取url地址 base_url = 'Https://www.baidu.com/' # 发起请求 response = requests.get(base_url) # 获取cookie cookiejar = response.cookies # 从cookiejar中获取cookie信息 cookie = requests.utils.dict_from_cookiejar(cookiejar) print(cookie)
2、Session
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
每次通过查找cookie很麻烦,需要复制粘贴,所以使用sessio来完成登录,只需要用户账号和密码就可以。
代码如下:
import requests # 创建session对象 session = requests.session() # 定义账号和密码 data = {'email':'xxxxxx','密码':'xxxxxx'} # 将账号和密码写入session中 session.post('http://www.renren.com/PLogin.do', data=data) # 使用含有账号和密码的session发起请求 response = session.get('http://www.renren.com/964508591/profile') print(response.text)