Python网络请求库Requests,妈妈再也不担心我的…
2019-03-13 23:35:16来源:博客园 阅读 ()
一、概况
网络请求可能是每门语言比较重要的一部分了,在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请求,语法比较简单,这也是学会爬虫的第一步。加油吧!骚年。
原文链接:https://www.cnblogs.com/qingdeng6359/p/10517779.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash