小白学爬虫系列-基础-requests详解-零基础学python爬虫

520次阅读
没有评论

「关注我,和我一起放下灵魂,让灵魂去搬砖。


小白学爬虫系列-基础-requests详解-零基础学python爬虫

作者:小一

介绍:放不下灵魂的搬砖者


Python版本3.8.0,开发工具:Pycharm


前面已经讲过如何安装并使用 requests 进行网页内容获取。但是requests 的功能可不止这些,跟我一起来看看吧


1. 获取内容

url = ‘https://movie.douban.com/top250’response = requests.get(url)# 打印响应结果的状态码、编码方式、cookie等内容print(response.status_code)print(response.encoding)print(response.cookies)

通过requests 的 get 方法获取​​豆瓣电影TOP 250​​ 的响应内容,包括状态码、编码、cookie等

运行结果如下:

418None<RequestsCookieJar[]>

不对啊,我要的结果呢?还有​​418​​是个什么神仙状态码?于是机智的我赶紧 google 了一下

htcpcp1.0协议中的418的意义是:当客户端给一个茶壶发送泡咖啡的请求时,茶壶就返回一个418错误状态码,表示“我是一个茶壶”。

查完更懵了,这又是个什么神仙解释?

不管了,反正就是返回不正确。会不会是因为豆瓣对访问进行头部识别?刚好上一节也说过怎么设置头部,说搞就搞

url = ‘https://movie.douban.com/top250’headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’,}response = requests.get(url=url, headers=headers)# 打印响应结果的状态码、编码方式、cookie等内容print(response.status_code)print(response.encoding)print(response.cookies)

返回结果如下

200utf-8<RequestsCookieJar[<Cookie bid=N_uBlMrf9mM for .douban.com/>]>

呼,果然如此,看到​​200​​不由得在心底​​又夸了一下自己​​。

上面的访问使用最基本的 get 请求,那如果我要加​​访问参数​​呢?

user_info = {‘username’: ‘yiye’, ‘passwd’: ‘zhiqiu’}response = requests.get(url=url, headers=headers, params=user_info)

什么?你说 get 请求不安全,行,那我们来试试 post 请求

user_info = {‘username’: ‘yiye’, ‘passwd’: ‘zhiqiu’}response = requests.post(url=url, headers=headers, data=user_info)

注意注意:post 请求中参数名为 data,get中为 params

当有时候我们需要传递 JSON 形式的数据时,可以使用 json.dumps() 方法对数据序列化

user_info = {‘username’: ‘yiye’, ‘passwd’: ‘xiaoyi’, ‘age’: ’18’}response = requests.post(url=url, headers=headers, data=json.dumps(user_info))


这里解释一下什么是表单数据:

当你在登录网页时,需要你填写​​用户名、密码、验证码​​等信息进行提交,这些信息会被统一放在​​一个表格​​里面,提交给服务器进行验证。

这些提交的数据称为表单数据


同样的,当我们需要上传文件时,也可以把文件放在参数中上传

upload_file = {‘file’: open(‘test.txt’, ‘rb’)}response = requests.post(url=url, files=upload_file)


2. cookie配置


咦,小一哥,你怎么又提到了 cookie ,上节不是说过了吗?

对,没错,因为 cookie 对于需要登录的网站来说,太重要了!


当你成功登录一个网站的时候,你可以将​​本次登录的 cookie 保存在本地​​​,等你下一次需要再次登录的时候,直接​​读取你本地的 cookie 内容​​,而不用再次输入用户名、密码等,是不是很方便?

# 获取浏览器cookieb_cookies = response.cookies# 将cookie 保存在本地cookies = dict()for i in b_cookies: cookies[i[‘name’]] = i[‘value’]with open(“file_path”, ‘wb’) as f: f.write(pickle.dumps(cookies))
# 第二次访问直接通过cookie 访问response = requests.get(url, cookies=cookies)print(response.status_code)print(response.encoding)


3. 会话(session)

既然提到了cookie ,那 session 也不能落下吧。


这里先普及一下什么是cookie,什么是session?

答:“​​cookie通过在客户端​​记录信息确定用户身份,​​session通过在服务器端​​记录信息确定用户身份”。总之就是你访问一次人家就认识你了,第二次去的时候可能直接就给你开门了,而不需要再登陆。

cookie​​以文本格式​​存储在​​浏览器​​上,存储量有限;

而会话存储在​​服务端​​,可以无限量存储多个变量并且比cookie更安全


也就是说,我们同样可以通过 session 会话去访问部分网页,不同的是,这些网页是通过服务器端 session 信息验证用户,而不是通过本地 cookie。

# 1. 获取session session = requests.Session()# 2. 传入本地cookies content = session.get(url, cookies=cookie).textprint(content)


4. 超时配置


为防止服务器响应缓慢,导致客户端处理异常。requests请求通常利用 timeout 变量来配置最大请求时间


连接超时一般设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口的默认大小是 3


Timeout 类型:

  • ​​连接超时​​:客户端实现到远端服务器端口的连接时 request 所等待的时间。

连接超时一般设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口的默认大小是 3。

  • ​​读取超时​​:客户端已经连接上服务器并且发送了request后,客户端等待服务器发送请求的时间。

一般指的是服务器发送第一个字节之前的时间。

timeout 设置单一的值,将会用作 ​​connect​​​ 和 ​​read​​ 二者的 timeout。

requests.get(url=url, timeout=5)

如果要分别制定,就需要​​传入一个元组​​。

requests.get(url=url, timeout=(5, 10))


5. SSL 证书验证

现在随处可见 https 开头的网站,Requests 可以为 HTTPS 请求​​验证 SSL 证书​​。

要想检查某个主机的SSL证书,你可以使用​​verify 参数​​。默认是​​True​​,表示需要验证

# 设置 verify 参数为 False,可以跳过证书验证response = requests.get(‘https://输入你的网址’, verify=False)print response.text


6. 代理


“小一哥,那什么时候会用到代理呢?”

“当然是当你要访问的网站对访问 IP 有限制的时候”


通过对任意请求方法提供 proxies 参数配置单个请求。

proxies = { “http”: “代理主机ip及端口号”, “https”: “代理主机ip及端口号”,}
# 通过requests 方法设置代理访问response = requests.get(“http://www.baidu.com/”, proxies = proxies)


以上就是关于 requests 库的一些常用方法,到现在为止,我们基本可以拿到我们想要的网页内容,或者设置访问头部、或者使用代理等


Python系列

Python系列会持续更新,从基础入门到进阶技巧,从编程语法到项目实战。若您在阅读的过程中发现文章存在错误,烦请指正,非常感谢;若您在阅读的过程中能有所收获,欢迎一起分享交流。

如果你也想和我一起学习Python,关注我吧!

学习Python,我们不只是说说而已

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-11-01发表,共计3567字。
新手QQ群:570568346,欢迎进群讨论 Python51学习