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

Python请求模块

时间:2023-03-26 15:15:30 Python

requestsPython内置的urllib模块可以用来访问资源,但是使用起来比较麻烦。requests是一个第三方库,非常方便处理URL资源。也是入门级爬虫推荐的库之一。如果已经安装了Anaconda,则可以省略安装requests,否则可以使用以下命令安装requests:$pipinstallrequestsrequests入门发送请求使用requests,需要先导入requests模块:>>>导入请求使用get()获取特定页面。以requests官方文档中提到的Githubpublictimeline为例:>>>url="https://api.github.com/events">>>resp=requests.get(url)这里get()方法返回一个Response对象,该对象被分配给变量resp。现在你可以通过这个对象获取你需要的内容了。响应内容>>>resp.status_code#响应码,200表示正常访问200>>>resp.text'[{"id":"11696703469","type":"CreateEvent","actor":{"id":59443325,"login":"mahmoudjafarinejad",...'>>>resp.encoding'utf-8'status_code返回响应码,这里的200表示正常访问。这里的resp.text返回响应的内容。在返回的响应内容中,请求会自动猜测文本编码。您可以使用encoding属性来查看使用的是什么编码。例如,此属性用于在文本中返回utf-8。二进制响应内容返回的Response对象可以使用content属性获取byte对象:>>>resp.contentb'[{"id":"11696703469","type":"CreateEvent","actor":{"id":59443325,"login":"mahmoudjafarinejad",...'JSON响应内容请求可以处理JSON数据。但是也有一些需要注意的地方,先看代码:>>>resp.json()[{'id':'11697045499','type':'IssueCommentEvent','actor':{'id':5268763,'login':'zz-jason',...]在此处使用json()获取JSON内容。这里注意:如果解码失败,这个方法会抛出异常。例如,如果返回的响应码是401,当尝试访问resp.json()时,将抛出ValueError:NoJSONobjectcouldbedecoded异常。另外需要注意的是,调用resp.json()成功并不代表响应成功。一些服务器在失败的响应中包含一个JSON对象。这时候调用resp.json()会返回这个包含错误详情的JSON对象。所以检测是否响应成功,需要配合使用resp.status_code。传递URL参数在访问网页时,我们可能会遇到带参数的URL。在使用requests的时候,我们可以传入dict作为参数(这里以http://httpbin.org为例):>>>resp=requests.get('http://httpbin.org/get',params={'key1':'value1','key2':'value2'})>>>resp.url'http://httpbin.org/get?key1=value1&key2=value2'在上面的例子中,传递key1=value1和key2=value2到指定的URL。使用resp.url查看URL是否已正确编码。将字典作为参数传递时,字典中值为None的任何键都不会添加到URL的查询字符串中。定义请求头有时候直接使用get()方法访问网站,返回的响应码不是200,这是因为有些网站有反爬虫机制。这时可以定义请求头来模拟浏览器正常访问网站。这里我们以豆瓣为例,在不定义请求头的情况下,尝试使用get()方法:>>>url="https://www.douban.com/">>>resp=requests.get(url)>>>resp.status_code418可以看到这里返回的响应码是418,现在定义请求头,再次访问:>>>headers={'User-Agent':'Mozilla/5.0'}>>>resp=requests.get(url,headers=headers)>>>resp.status_code200这次,返回的响应码是200,表示访问成功。那么这个时候就可以使用返回的Response对象来获取需要的内容了。这里提醒一下:上面以豆瓣为例,不要频繁发起请求。如果频繁请求,可能会被认为是恶意攻击,也会给服务器造成负担。POST请求需要发送一些编码为表单的数据。这时候可以使用post()方法,给data参数传一个字典。requests将在发出请求时将传入的数据字典编码为一种形式:>>>data={'key1':'value1','key2':'value2'}>>>resp=requests.post('http://httpbin.org/post',data=data)>>>print(resp.text){..."form":{"key1":"value1","key2":"value2"},...超时参数可以告诉请求在超时参数给定的时间过去后停止响应。(超时参数以秒为单位)>>>resp=requests.get(url,timeout=2)这里表示2秒后超时。以上关于requests的内容很容易上手。更详细的内容请访问以下链接获取详细参考:https://requests.readthedocs.io/en/latest/参考来源“Requests:HTTPforHumans?”.requests。阅读thedocs.io。2020年3月5日检索。廖雪峰。《Python教程》.liaoxuefeng.com.[2020-03-05].欢迎关注微信公众号《书所集录》