当前位置: 首页 > 后端技术 > Python

想学习Python却不知道如何安装和使用requests模块?

时间:2023-03-26 01:02:17 Python

主要学习requests的http模块,主要用于发送请求和获取响应。这个模块有很多替代模块,比如urllib模块,但是工作中用的最多的是requests模块。requests的代码简单易懂,相比于臃肿的urllib模块,使用requests编写的爬虫代码会更少,更容易实现某个功能。因此,requests模块在python中非常重要。建议您掌握该模块的使用。requests模块下面我们来学习如何在代码中实现我们的爬虫1.requests模块介绍requests文档http://docs.python-requests.org/zh_CN/latest/index.html**1.1requests模块的作用:**发送http请求,获取响应数据1.2requests模块是第三方模块,需要在你的python(虚拟)环境中额外安装pip/pip3installrequests1.3requests模块发送get请求要求:发送请求通过requests到百度首页,get在本页源码上运行如下代码,观察打印输出结果#1.2.1-简单代码实现importrequests#targeturrl='https://www.baidu.com'#向目标url发送get请求response=requests.get(url)#打印响应内容print(response.text)知识点:掌握requests模块发送get请求提早引起;我们尝试用下面的方法来解决中文乱码的问题#1.2.2-response.contentimportrequests#targeturrl='https://www.baidu.com'#向目标url发送get请求response=要求。get(url)#打印响应内容#print(response.text)print(response.content.decode())#注意这里!1.response.text是requests模块根据chardet模块推断出的编码字符集解码后的结果2.网络传输的字符串都是bytes类型,所以response.text=response.content.decode('InferredencodingCharacterset')3.我们可以在网页源码中搜索charset,尝试参考编码后的字符集,注意不准确2.1response.text和response.content的区别:response.text类型:str解码类类型:请求模块自动根据HTTP标头对响应的编码进行有根据的猜测。预估文本编码response.contentType:bytesDecodingType:Notspecified2.2通过解码response.content解决中文乱码response.content.decode()默认为utf-8response.content.decode("GBK")普通编码字符集utf-8gbkgb2312ascii(发音:问码)iso-8859-12.3response响应对象的其他常用属性或方法response=requests。get(url)中的response是发送请求得到的response对象;response响应对象除了text和content之外还有其他常用的属性或方法来获取响应内容:response.url响应url;有时响应url和请求url不一致returncookieJartyperesponse.cookiesresponsecookie(set-cookieAction后;返回cookieJar类型response.json()自动将json字符串类型的响应内容转换为python对象(dict或list)#1.2.3-responseother常用属性importrequests#targeturrlurl='https://www.baidu.com'#向目标url发送get请求response=requests.get(url)#打印响应内容#print(response.text)#print(response.content.decode())#注意这里!print(response.url)#打印响应urlprint(response.status_code)#打印响应p的状态码rint(response.request.headers)#打印响应对象的请求头print(response.headers)#打印响应头print(response.request._cookies)#打印请求中携带的cookiesprint(response.cookies)#打印响应cookie中携带的3.requests模块发送请求3.1发送带有header的请求先写一段获取百度首页的代码importrequestsurl='https://www.baidu.com'response=requests.get(url)print(response.content.decode())#打印request对应的response的请求头信息print(response.request.headers)3.1.1浏览器上百度首页源码对比的思考代码中的百度首页源代码,有什么区别?查看网页源码的方法:右键查看网页源码或右键查看代码中对应url的响应内容与百度首页源码对比.有什么不同?查看该url对应的响应内容的方法:右键-勾选点击网络选择保留日志刷新页面在浏览器地址栏的名称栏下查看相同url的响应码。百度首页的源代码很小,为什么?我们需要带上请求头信息,回顾一下爬虫的概念,模拟浏览器,欺骗服务器,获取和浏览器一样的内容。请求头中有很多字段,其中User-Agent字段是必不可少的,表示客户端的操作系统和浏览器3.1.2发送带有请求头的请求的方法requests.get(url,headers=headers)Theheadersparameter接收字典形式的请求头字段名作为键,字段对应的值作为值3.1.3浏览器完成代码实现在浏览器中复制User-Agent,构建headers字典;完成以下代码后,运行代码查看结果importrequestsurl='https://www.baidu.com'headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}#将User-Agent放在请求头中,模拟浏览器发送请求response=requests.get(url,headers=headers)print(response.content)#打印请求头信息print(response.request.headers)3.2发送带参数的请求我们在百度搜索的时候,经常会发现会有一个?在url地址中,然后问号后面是请求参数,也就是查询字符串url发起请求importrequestsheaders={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}url='https://www.baidu.com/s?wd=python'response=requests.get(url,headers=headers)3.2.2通过params携带参数字典1.构建请求参数字典2.在向接口发送请求时,带上上面的参数字典,参数字典设置为paramsimportrequestsheaders={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}#这是目标url#url='https://www.baidu.com/s?wd=python'#末尾有没有问号结果都是一样的url='https://www.baidu.com/s?'#请求参数是一个字典,即wd=pythonkw={'wd':'python'}#以请求参数发起请求并获取响应response=requests.get(url,headers=headers,params=kw)print(response.content)3.3在headers参数中携带cookie网站经常会在请求头中使用Cookie字段来维护用户的访问状态,那么我们可以在headers参数中加入cookie模拟普通用户的请求下面以github登录为例:3.3.1github登录抓包分析打开浏览器,右键-勾选,点击网络,勾选Preservelog,访问github登录的url地址https://github.com/login,输入账号密码,点击登录后,访问一个需要登录的url,获取正确的内容,比如点击右上角的Yourprofile,访问https://github.com/USER_NAME确认url后,然后确认发送请求所需的请求头信息中的User-Agent和Cookie3.3.2完成代码从浏览器中复制User-Agent和Cookie请求头字段和值到浏览器中并且headers参数必须是consistentheaders请求参数字典中Cookie键对应的值为字符串代理':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.87Safari/537.36',#从浏览器复制的Cookie'Cookie':'xxx这里是复制的cookie字符串'}#请求头参数字典cookie中携带stringresp=requests.get(url,headers=headers)print(resp.text)3.3.3运行代码验证结果在打印输出结果中搜索title,如果html中的title文本内容是你的github账号,则成功使用headers参数携带cookie,获取登录后才能访问的页面。知识点:掌握cookie在headers中的使用3.4cookies参数在上一节中,我们在headers参数中携带了cookie,也可以使用cookies参数的特殊cookies参数形式:dictionarycookies={"cookiename":"cookievalue"}这个字典对应请求头中的Cookie字符串,每一个之间用分号和空格隔开对于字典键值对,等号左边是cookie的名字,对应cookies字典的key,等号右边对应cookies字典的value。cookie参数的使用方法response=requests.get(url,cookies)将cookie字符串转化为cookie参数需要字典:cookies_dict={cookie.split('=')[0]:cookie.split('=')[-1]forcookieincookies_str.split(';')}注意:cookie一般都有过期时间,一旦过期需要重新获取importrequestsurl='https://github.com/USER_NAME'#构造请求头字典headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.87Safari/537.36'}#构造cookies字典cookies_str='从浏览器复制的cookies字符串'cookies_dict={cookie.split('=')[0]:cookie.split('=')[-1]forcookieincookies_str.split(';')}#请求header参数字典携带cookie字符串resp=requests.get(url,headers=headers,cookies=cookies_dict)print(resp.text)知识点:掌握cookies参数的使用3.5cookieJar对象转cookiesdic的方法tionaryrequests获得的resposne对象有cookie属性值。该属性值是一个cookieJar类型,其中包含本地服务器设置的cookie。我们如何将其转换为cookie字典?转换方法cookies_dict=requests.utils.dict_from_cookiejar(response.cookies)其中response.cookies返回一个cookieJar类型的对象requests.utils.dict_from_cookiejar函数返回cookies字典知识点:掌握cookieJar的转换方法最后如果文章对你有帮助你,给作者点赞\拒绝白嫖,从我做起