requests高级
前言
这篇文档中将介绍 Requests 的一些高级特性。为了模拟浏览器的功能,只有之前的知识是不够的,在学习了高级的知识后,我们可以更好的模拟浏览器的功能。完成更多的网页的采集工作。
一、状态保持
HTTP协议是无状态的协议。无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后
面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。因此,Cookie和Session存在的作用是进行状态管理。会话对象让你能够跨请求保持某些参数。
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
1. Cookie
现在的网站中有这样的一种网站类型,也就是需要用户注册以后,并且登陆才能访问的网站,或者
说在不登录的情况下不能访问自己的私有数据,例如微博、微信等。
网站记录用户信息的方式就是通过客户端的Cookie值。例如:当我们在浏览器中保存账号和密码的同时,浏览器在我们的电脑上保存了我们的用户信息,并且在下次访问这个页面的时候就会自动的为我们加载Cookie信息。
在需要登陆的网站中,浏览器将Cookie中的信息发送出去,服务器验证Cookie信息,确认登录。既
然浏览器在发送请求的时候带有Cookie信息,那么我们的程序同样也要携带Cookie信息。
Cookie是当你访问某个站点或者特定页面的时候,留存在电脑里的一段文本,它用于跟踪记录网站访问者的相关数据信息,比如:搜索偏好、行为点击、账号、密码等内容。
web访问全过程
浏览器访问WEB服务器的过程
在用户访问网页时,不论是通过URL输入域名或IP,还是点击链接,浏览器向WEB服务器发出了一
个HTTP请求(Http Request),WEB服务器接收到客户端浏览器的请求之后,响应客户端的请求,发回相应的响应信息(Http Response),浏览器解析引擎,排版引擎分析返回的内容,呈现给用户。WEB应用程序在于服务器交互的过程中,HTTP请求和响应时发送的都是一个消息结构。
1. 什么是cookie
cookie在http请求和http响应的头信息中,cookie是消息头的一种很重要的属性。当用户通过浏览
器首次访问一个域名时,访问的WEB服务器会给客户端发送数据,以保持WEB服务器与客户端之间的状态保持,这些数据就是Cookie,它是 Internet 站点创建的 ,为了辨别用户身份而储存在用户本地终端上的数据,Cookie中的信息一般都是经过加密的,Cookie存在缓存中或者硬盘中,在硬盘中的是一些小文本文件,当你访问该网站时,就会读取对应网站的Cookie信息,Cookie有效地提升了我们的上网体验。一般而言,一旦将 Cookie 保存在计算机上,则只有创建该 Cookie 的网站才能读取它。
2. 为什么需要cookie
Http协议是一个无状态的面向连接的协议,Http协议是基于tcp/ip协议层之上的协议,当客户端与
服务器建立连接之后,它们之间的TCP连接一直都是保持的,至于保持的时间是多久,是通过服务器端来设置的,当客户端再一次访问该服务器时,会继续使用上一次建立的连接,但是,由于Http协议是无状态的,WEB服务器并不知道这两个请求是否同一个客户端,这两次请求之间是独立的。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.cookie可以记录用户的登录状态,通常web服务器会在用户登录成功后下发一个签名来标记Cookie的有效性,这样免去了用户多次认证和登录网站。记录用户的访问状态。
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的,
那么我们可以利用Requests库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。
cookie 的种类
会话Cookie(Session Cookie):这个类型的cookie只在会话期间内有效,保存在浏览器的缓存之
中,用户访问网站时,会话Cookie被创建,当关闭浏览器的时候,它会被浏览器删除。
持久Cookie(Persistent Cookie):这个类型的cookie长期在用户会话中生效。当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie。所以它可以记录很多用户初始化或自定义化的信息,比如什么时候第一次登录及弱登录态等。
Secure cookie:安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的。
HttpOnly Cookie :这个类型的cookie只能在http(https)请求上传递,对客户端脚本语言无效,从而有效避免了跨站攻击。
第三方cookie: 第一方cookie是当前访问的域名或子域名下的生成的Cookie。 第三方cookie:第三
方cookie是第三方域名创建的Cookie。
cookie 的构成
Cookie是http消息头中的一种属性,包括:Cookie名字(Name)Cookie的值(Value),Cookie
的过期时间(Expires / Max-Age),Cookie作用路径(Path),Cookie所在域名(Domain),使用
Cookie进行安全连接(Secure)。 前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小
(Size,不同浏览器对Cookie个数及大小限制是有差异的)。
Cookie值信息可以在浏览器中复制过来,放到headers中,如下所示:
import requests
url = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en'
headers = {
'Cookie': 'BIDUPSID=4586A59BA88A08E3C8CBA1B118846558; PSTM=1712803491; MCITY=-257%3A; BDUSS=20tWUZBdjFaQ2xkT2dNZm9KUDVJNGVSWTlkenZBVEpYTFJKMTh1N1FvMmtWcE5uSVFBQUFBJCQAAAAAAAAAAAEAAAD1z1ItxsvE44KAs~S91gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKTJa2ekyWtnd; BDUSS_BFESS=20tWUZBdjFaQ2xkT2dNZm9KUDVJNGVSWTlkenZBVEpYTFJKMTh1N1FvMmtWcE5uSVFBQUFBJCQAAAAAAAAAAAEAAAD1z1ItxsvE44KAs~S91gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKTJa2ekyWtnd; MAWEBCUID=web_eSJAYTXMUKcXDniEitreZqGFoxMdBuCGsHFBGnvjtmjfsfAnJa; H_WISE_SIDS_BFESS=110085_633616_643940_644369_645472_645169_645434_644900_646421_646359_646499_646770_646779_646775_646777_646771_647064_647946_647980; BAIDUID=3C592801F1E50F0B378FE41614759C99:FG=1; BAIDUID_BFESS=3C592801F1E50F0B378FE41614759C99:FG=1; ZFY=ZmeI6PGfSI62fQT5XGUvQiSCDtHkOJ7AIf9N:BZdKij4:C; H_WISE_SIDS=61027_62485_62327_62969_63050_63189_63194_63211_63242_63246_63247_63256_63267; H_PS_PSSID=61027_62485_62327_62969_63189_63194_63211_63242_63247_63256_63267_63074_63326',
'Host': 'fanyi.baidu.com',
'Origin': 'https://fanyi.baidu.com',
'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
}
data = {
'from': 'zh',
'to': 'en',
'query': '你好',
'transtype': 'realtime',
'simple_means_flag': '3',
'sign': '232427.485594',
'token'