requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
使用Apache2Licensed许可证的基于Python开发的HTTP库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
(2)为什么要使用requests模块
1)因为在使用urllib模块的时候,会有诸多不便之处:
1.手动处理url编码2.手动处理post请求的参数3.处理cookie操作比较繁琐创建cookiejar对象创建handler对象创建opener对象4.处理代理的操作比较繁琐创建handler对象,代理ip和端口封装到该对象创建opener对象2)使用requests模块,相对来说的便利:
1.自动处理url编码2.自动处理post请求参数3.大大简化cookie和代理操作...Requests模块的api更加便捷(本质就是封装了urllib3)。
注意:Requests库发送请求将网页内容下载下来后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求。
$pip3installrequests使用流程:
1.指定url2.使用requests模块发起请求3.获取响应数据4.进行持久化存储2、各种请求方式常用的就是requests.get()和requests.post()
requests.get(url,params=None,**kwargs)requests.post(url,data=None,json=None,**kwargs)requests.put(url,data=None,**kwargs)requests.head(url,**kwargs)requests.delete(url,**kwargs)requests.patch(url,data=None,**kwargs)requests.options(url,**kwargs)#以上方法均是在此方法的基础上构建requests.request(method,url,**kwargs)注意:requests.get()等价于requests.request(method="get")。
HTTP默认的请求方法就是GET:
GET请求常用的操作:
需求:指定一个词条,获取搜狗的搜索结果所对应的页面数据。
requests.get()方法解析:
点击“+”,查看params的详细用法:
可以url携带的参数抽取出来,封装为是字典或者是bytes的形式,将封装好的数据赋值给params。
(1)数据不会出现在地址栏中
(2)数据的大小没有上限
(3)有请求体
(4)请求体中如果存在中文,会使用URL编码
requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据。
注意:
1)查看Headers框的General信息,确认RequestMethod是POST。
2)携带的参数包含了用户名密码的值
通常,你想要发送一些编码为表单形式的数据——非常像一个HTML表单。要实现这个,只需简单地传递一个字典给data参数。你的数据字典在发出请求时会自动编码为表单形式:
点击页面百分比按钮,查看get请求携带的参数:
需求:爬取肯德基城市餐厅位置数据。
点击查询,地址栏url是不会发生变化的,因此不能通过地址栏获取post请求url,需要通过抓包工具获取异步请求所对应的url。
查看form表单携带的参数:
'{"Table":[{"rowcount":28}],"Table1":[{"rownum":1,"storeName":"开发区上海路","addressDetail":"开发区上海路80号利群时代超市一楼","pro":"Wi-Fi,店内参观,礼品卡,生日餐会","provinceName":"江苏省","cityName":"南通市"},......,{"rownum":10,"storeName":"上海南路","addressDetail":"上海南路3号699生活空间3号楼","pro":"Wi-Fi,店内参观,礼品卡,生日餐会","provinceName":"江西省","cityName":"南昌市"}]}'3、综合项目实战需求:爬取搜狗知乎某一个词条对应一定范围页面表示的页面数据。
可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组:
默认情况下,verify是设置为True的。选项verify仅应用于主机证书。
session参数可用来自动管理cookie和headers。(不够灵活,不建议使用)
抽屉新热榜示例如下:
需求:爬取张三用户的豆瓣网的个人主页页面数据
在此次请求发送成功后,服务器端响应回客户端一个cookie,这个cookie会自动存储在session对象当中,下一次请求时,session对象会自动携带cookie。
这些网站在发现非正常访客后,就会把非正常访客的ip禁用,导致他们无法正常访问网站。
2)反反爬手段:使用代理IP的话,如果一个地址被封了,还可以换一个ip继续访问。
正向代理:代替客户端获取数据。
反向代理:代理服务器端提供数据。
爬虫都是应用的正向代理,代替客户端获取数据。
www.goubanjia.com(推荐使用)、快代理、西祠代理。
1)查看本地ip:
2)查看得到一个代理Ip:
可以看到地址已经改为了指定的代理ip,显示本机地址为俄罗斯。
(1)手动识别验证码
(2)云打码平台自动识别验证码
需要同时注册普通用户和开发者用户。
3)实例代码的下载
开发文档-》调用实例及最新的DLL
解压安装包得到如下文件:
4)创建一个软件
开发者页面中点击我的软件-》点击添加新的软件:
输入软件名称后提交:
得到的通讯密钥等下也会利用到。
使用前面下载的示例代码中的源码进行修改,就可以帮助识别验证码图片中的数据值了。
将YDMHTTPDemo3.x.py文件中,YDMHttp这个类的代码截取出来:
利用YDMHTTPDemo3.x.py文件中剩余的代码定义一个获取验证码的函数: