(四)requests模块的cookies 和 代理操作

一.基于requests模块的cookie操作

 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取某个人“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的

例如:我们要得到如下的形式

但是,我们通过之前所学习的知识

import requests
# 人人网个人信息页面的url
url = 'http://www.renren.com'

# 伪装UA
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
# 发送请求,获取响应对象
response = requests.get(url=url, headers=headers)
# 将响应内容写入文件
with open('./renren.html', 'w', encoding='utf-8') as fp:
    fp.write(response.text)

 得到的是,

呀 呀 呀  什么原因啊? 不是我想要的啊

不急不急,,我们分析一下啊

当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookies,,,我们之所以没有拿到我们想要的页面数据,其实就是cookies搞得,既然我们知道了病症在哪里,我们就可以对症下药了

回顾cookies:

cookie概念:当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie。

cookie作用:我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面。我们经常会在此时设置30天内记住我,或者自动登录选项。那么它们是怎么记录信息的呢,
       答案就是今天的主角cookie了,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,
      每次交换数据都需要建立新的链接。就像我们去超市买东西,没有积分卡的情况下,我们买完东西之后,超市没有我们的任何消费信息,但我们办了积分卡之后,超市就有了我们的消费信息。
     cookie就像是积分卡,可以保存积分,商品就是我们的信息,超市的系统就像服务器后台,http协议就是交易的过程。

ok 回答上面的问题,我们如何获取某个人的个人页面?

思路: 

1.我们需要使用爬虫程序对人人网的登录时的请求进行一次抓取,获取请求中的cookie数据(也就是post请求,可以使用抓包工具)

2.在使用个人信息页的url进行请求时,该请求需要携带 1 中的cookie,只有携带了cookie后,服务器才可识别这次请求的用户信息,方可响应回指定的用户信息页数据

  2.1创建一个session对象[session=request.session()],该对象可以发起请求,可以自动将请求后的创建cookies进行储存

  2.2我们用session发送post请求和get请求

 
 
import requests
# 创建一个session对象,该对象会自动将请求中的cookie进行存储和携带
session = requests.session()
# 进行登录---抓包工具来抓取
url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20181112117492'

data = {
'email': '[email protected]',
'icode': '',
'origURL': 'http://www.renren.com/home',
'domain': 'renren.com',
'key_id': '1',
'captcha_type': 'web_login',
'password': '708cfa72a3e30bc6d11811f0544e2349254cd09be8476db8a700c1e039d2b5f2',
'rkey': '3f39d976fc598199c3e29b75c713bf2e',
'f': 'http%3A%2F%2Fwww.renren.com%2F447007586'
}

headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
# 使用session发送请求,目的是为了将session保存该次请求中的cookie
res = session.post(url=url, headers=headers, data=data)

# 再次使用session进行请求的发送,该次请求中已经携带了cookie
person_url = 'http://www.renren.com/447007586'
person_res = session.get(url=person_url, headers=headers).text

with open('./renren.html', 'w', encoding='utf-8') as fp:
fp.write(person_res)

猜你喜欢

转载自www.cnblogs.com/a438842265/p/10171117.html