会话


实际上HTTP网络连接是无记忆的,每发起一次网络请求只能获取一次数据,在下一次访问时,不能获取上一次访问的状态。为了维持账户的登录状态,确保上一次访问提交过账户登录信息后,下一次访问仍能继续保
持登录状态,需要设计一套会话维持机制来记录每次访问的状态。会话是指终端用户(例如浏览器)与网站服务器进行通信的过程,而会话维持指终端用户与网站服务器维持通信的过程,即保持用户的登录状态。
第2行1
第4行和密码青


会话维持


通过会话维持解决HTTP网络连接无记忆问题的方法是在客户端(浏览器)和服务器分别建立会话。当用户使用浏览器登录网站时,网站对应的服务器会在内存中建立一个Cookies文件,以保存客户端的信息和登录信息(登录时间、登录者的主机、登录的用户名、登录密钥等),Cookies建立完成后会返回相应的文件给浏览器,其中包含登录成功信息和密钥信息等。浏览器也会在本地创建一个Cookies文件来存储当前的登录状态和接收的密钥等信息。当用户再次访问服务器中的内容时,会将Cookies文件信息一同发送给服务器。服务器会根据Cookies文件的密钥等信息判断客户端是否在之前成功登录。如果Cookies文件显示客户端已经登录成功则返回登录状态的网页内容,否则返回没有登录状态的网页内容。会话维持的创建过程如图15-23所示。

会话维持需要保证访问的客户端是同一个软件,即使用同一个浏览器访问,例如使用Chrome浏览器登录人民邮电出版社官网,之后继续访问网站内的其他信息,人民邮电出版社官网的服务器会创建Cookies文件以存储当前使用Chrome浏览器产生的请求信息,Chrome浏览器也会将人民邮电出版社官网服务器返回的信息存储到本地Cookies文件中。而此时如果启动一个新的浏览器程序,新的浏览器程序窗口并不在之前的同一个网页窗口中,此时新的浏览器程序中没有之前访问的Cookies文件,因此在新浏览器程序窗口进入人民邮电出
资涌
版社官网时,仍然会显示未登录状态。会话维持需要在同一个浏览器的同一段时间中进行。如果时间太长,服务器会清除Cookies文件信息,导致再次访问时仍需要重新登录。


 创建会话


requests库的sessions.py文件中的类Session可用于实现自动维持会话、自动创建Cookies文件,并记录从服务器返回的信息,大大减少手动获取Cookies文件的麻烦。其使用形式如下:

r=requests.Session()

国值为一个会话对象;该对象中包含多个方法,例如gt(0和pS0方法。会话对象可以实现会话的维持系例代码(实现登录账户):

'''会话'''
import requests
s = requests.Session()
data = {'Email': '15156883862','Password': '123python','RememberMe': 'true','__RequestVerificationToken': 'qh6oY_zP255k2dk83pW5ZNajoAMQD9QxP3tLOK5f54wmccKgzOPCoUhHP5ICO5xlqg2yyLZM_NisZJyOzNszwZcKEteXOInHEv6sW9HlY9Q1'}
r1 = s.post('https://account.ryjiaoyu.com/log-in?returnUrl=https%3a%2f%2fwww.ryjiaoyu.com%2f',data=data)
r2 = s.get('https://www.ryjiaoyu.com/user')
print(r1.text, r2.text)

代理服务器


在爬取某些网站的网页资源时,如果请求次数较少,一般能正常获取内容,但是一旦开始大规模且频繁地请求爬取资源,网站可能会弹出验证码对话框,或者跳转到登录认证页面,甚至可能会直接封禁客户端的IP(互联网协议,Internet Protocol)地址,导致用户在一定时间段内无法再次访问该网站。为避免此种情况,可以使用代理服务器获取网页资源。


 代理服务器的工作流程


代理服务器是介于客户端和网站服务器之间的一台中转站服务器。代理服务器的工作流程是客户端向代理服务器发出url请求,代理服务器接收到请求后,向指定服务器发出url请求,并将获取的网页返回给客户端,而
不是直接从客户端到服务器获取网页。当客户端频繁爬取某个网站的信息时,由于中间使用了代理服务器,代理服务器会直接从服务器获取网页资源。代理服务器的工作流程如图15-24所示。

获取代理服务器
通过网络搜索即可查找到大量免费的或付费的代理服务器,免费的代理服务器不一定安全可靠,但可供学习使用,当读者需要将代理服务器用于项目开发时,则应尽量选择付费的、安全可靠的代理服务器。例如图15.25所示的内容为某网站提供的一些免费的代理服务器。代理服务器一般会提供一个IP地址,当客户端通过&IP地址连接到代理服务器后,就可以开始使用代理服务器的功能。

代理服务器的使用方法
将get()、post()丽数中的第3个参数设置为proxies,即表示使用代理服务器。
示例代码: 

'''代理服务器'''
import requests
proxie = {'http':'http://115.29.199.16:8118'}
r = requests.get('https://www.ryjiaoyu.com/',proxies= proxie)
print(r.text)

第2行代码创建了一个字典,字典中的键http对应的值表示一个免费的代理服务器。
仍注意大部分免费的代理服务器都有一定的时效性,因此读者可能无法使用此代理服务器。
第3行代码在get()函数中填入参数proxies,且其值为字典proxie,表示在访问人邮教育社区官网时,会通过IP地址为115.29,199.16:8118的代理服务器来间接访问。代理服务器获取到网页内容后,会将网页内容转发给客户端。

 selenium 库驱动浏览器


selenium库是一种用于Web应用程序测试的工具,它可以驱动浏览器执行特定操作,自动按照脚本代码做出单击、输入、打开、验证等操作,支持的浏览器包括IE、Firefox、Safari、Chrome、Opera等。而在办公领域中如果经常需要使用浏览器操作某些内容,就可以使用selenium库来实现,例如将大量数据上传到网页中或者实现自动驱动浏览器进行操作。
与requests库不同的是,selenium库是基于浏览器的驱动程序来驱动浏览器执行操作的。且浏览器可以实现网页源代码的渲染,因此通过selenium库还可以轻松获取网页中渲染后的数据信息。

用 selenium 库前的准备


selenium 库驱动浏览器的原理
览器是在浏览器内核基础之上开发而成的,测览器内核主要负责对网页语法进行哪释并谊类(示)网酬如360浏览器和Chrome浏览器都使用Chrome内核,如图15-26和图15:27所示:丽QQ浏览器使用[E内msafari浏览器使用Webkit内核。

虽然浏览器内核可以被selenium库驱动,但还是需要安装对应版本的测览器内核驱动程序,以便于控制web浏览器的行为。每个浏览器都有一个特定的用于支持测览器运行的WebDriver,被称为驱动程序(可以进入selenium库的官网进行下载,如果下载失败或无法匹配版本,还可以尝试下面介绍的相关方法)。
。安装 WebDriver
这里以Chrome浏览器为例,开始介绍安装浏览器内核驱动程序WebDriver的方法。针对Chrome浏览器的WebDriver可以进入专用下载通道进行下载,如图15-28所示。根据图15-27可知Chrome浏览器的内核版本为91.0.4472.124,读者可能会找不到版本号完全相同的WebDriver,但也可以使用与浏览器版本最为接近的版本,例如本书中下载的WebDriver的版本为91.0.4472.101。
选择并单击“91.0.4472.101”后将进入如图15-29所示的驱动程序安装包页面,Linux操作系统选择chromedriver_linux64.zip”,macOS操作系统选择“chromedriver_mac64.zip”,macOS操作系统(m1芯片)选择“chromedriver_mac64_m1.zip”,Windows操作系统选择“chromedriver_win32.zip”

下载完成后还需要解压相应文件,并将解压后的文件中的chromedriver,exe文件移动到Python安装目录路径下的Scripts文件夹中。Pvthon安装目录路径的确定方法分为两种情况,对于Windows系统来说,在命令资示符窗口中输入命令wbeze-python并按Enter键即可获取Python的安装目录路径。对于acOS系统来说金终端输入命令mhieh pythen3并按Enter键即可获取Python安装目录路径。以Windows系统为例,最终结果如图15-30所示。至此即完成了所有关于WebDriver的配置。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐