Python网络请求库Requests,妈妈再也不担心我的网络请求了!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python网络请求库Requests,妈妈再也不担心我的网络请求了!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5363字,纯文字阅读大概需要8分钟。
内容图文
一、概况
网络请求可能是每门语言比较重要的一部分了,在Python语言中,虽然有 urllib
这样的自带原生网络请求库,但是它的一些API对待开发者好像不怎么友好。So, Requests
的革命开始了,不仅API人性化,更重要的是它支持 urllib
所有特性。
Requests
支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL
和 POST
数据自动编码。好处不多说了,我们快来体验一下吧。
好像忘记说了一句,Requests的库再牛逼,底层也是 urllib
。
这里的,教,程大家一起学习!在我的Python学习 qun:【前面9 8 4 】【中间6 3 2 】【后面5 7 9 】动动你的小指头把数字连起来即可,欢迎加入到学习队伍里,有许多正在提升自己的小伙伴, 大家对学习 Python编程有问题,可以随时问,大家多交流!
二、准备
- 安装requests库
pip3 install requests 复制代码
###三、使用
1、Get请求:
response = requests.get("http://www.baidu.com/") 复制代码
看到没,对,你没看错,发起GET请求就短短的一行代码。 返回的 response
有很多属性,我们来看看:
response.text 返回解码后的字符串, respones.content 以字节形式(二进制)返回。 response.status_code? 响应状态码 response.request.headers? 请求的请求头 response.headers? 响应头 response.encoding = 'utf-8' 可以设置编码类型 response.encoding 获取当前的编码 response.json() 内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常 复制代码
- 添加参数和请求头
import requests #参数 kw = {'wd':'美女'} #请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" } # params 接收一个字典或者字符串的查询参数, # 字典类型自动转换为url编码,不需要urlencode() response = requests.get( "http://www.baidu.com/s?", params = kw, headers = headers ) # 查看响应内容,response.text 返回的是Unicode格式的数据 print (response.text) # 查看响应内容,response.content返回的字节流数据 print (respones.content) # 查看完整url地址 print (response.url) # 查看响应头部字符编码 print (response.encoding) # 查看响应码 print (response.status_code) 复制代码
返回的内容如下:
......内容太多,不宜展示 ......内容太多,不宜展示 'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E' 'utf-8' 200 复制代码
注意
- 使用
response.text
时,Requests
会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。 - 使用
response.content
时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
比如:
import requests response = requests.get("http://www.sina.com") print(response.request.headers) print(response.content.decode('utf-8')) 复制代码
结果:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>新浪首页</title> <meta name="keywords" content="新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,门户,资讯" /> ... 复制代码
如果用 response.text
可能会出现乱码情况,比如:
import requests response = requests.get("http://www.sina.com") print(response.text) 复制代码
结果:
<!DOCTYPE html> <!-- [ published at 2017-06-09 15:18:10 ] --> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>新浪首页</title> <meta name="keywords" content="新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,é—¨æ?·,èµ?讯" /> <meta name="description" content="新浪网为全ç??用æ?·24å°?æ—¶æ??ä¾?å…¨é?¢å??æ—¶ç??ä¸æ–?èµ?讯ï¼?å?…容è¦?ç?–å?½å?…外çª?å?‘æ–°é—»äº?件ã€?体å??èµ?äº?ã€?娱ä¹?æ—¶å°?ã€?产ä¸?èµ?讯ã€?å®?用信æ?¯ç‰ï¼?设æ?‰æ–°é—»ã€?体è?²ã€?娱ä¹?ã€?è´¢ç»?ã€?科æ?€ã€?æ?¿äº§ã€?汽车ç‰30å¤?个å?…容频é?“ï¼?å??时开设å??客ã€?è§?频ã€?论å??ç‰è?ªç”±äº’å?¨äº¤æµ?空间ã€?" /> <link rel="mask-icon" sizes="any" href="//www.sina.com.cn/favicon.svg" color="red"> 复制代码
- 原因
当收到一个响应时, Requests
会猜测响应的编码方式,用于在你调用 response.text
方法时对响应进行解码。 Requests
首先在 HTTP 头部检测是否存在指定的编码方式,如果不存在,则会使用 chardet.detect
来尝试猜测编码方式(存在误差),所以更推荐 response.content.deocde()
2、Post请求:
网站登录和注册等功能一般都是通过post请求方式做的,学会用 Requests
发起post请求也是爬取需要登录网站的第一步。
import requests #测试请求地址 req_url = "https://httpbin.org/post" #表单数据 formdata = { 'username': 'test', 'password': '123456', } #添加请求头 req_header = { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', } #发起请求 response = requests.post( req_url, data = formdata, headers = req_header ) print (response.text) # 如果是json文件可以直接显示 #print (response.json()) 复制代码
结果:
{ "args": {}, "data": "", "files": {}, "form": { "password": "123456", "username": "test" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "29", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" }, "json": null, "origin": "223.72.76.90, 223.72.76.90", "url": "https://httpbin.org/post" } 复制代码
- 上传文件
url = 'https://httpbin.org/post' files = {'file': open('image.png', 'rb')} response = requests.post(url, files=files) print(response.text) 复制代码
结果:
{ "args": {}, "data": "", "files": { "file": "....内容太多,不宜展示" }, "form": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "27597", "Content-Type": "multipart/form-data; boundary=16afeeccbaec949570677ca271dc2d0c", "Host": "httpbin.org", "User-Agent": "python-requests/2.21.0" }, "json": null, "origin": "223.72.76.90, 223.72.76.90", "url": "https://httpbin.org/post" } 复制代码
四、总结
以上是 Requests
最基本的Get请求和Post请求,语法比较简单,这也是学会爬虫的第一步。加油吧!骚年。
内容总结
以上是互联网集市为您收集整理的Python网络请求库Requests,妈妈再也不担心我的网络请求了!全部内容,希望文章能够帮你解决Python网络请求库Requests,妈妈再也不担心我的网络请求了!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。