您好,欢迎访问一九零五行业门户网

Python如何使用Requests请求网页

requests 继承了urllib2的所有特性。
requests支持http连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 url 和 post 数据自动编码。
安装方式
利用 pip 安装
$ pip install requests
get请求基本get请求(headers参数 和 parmas参数)
1.最基本的get请求可以直接用get方法'
response = requests.get("http://www.baidu.com/") # 也可以这么写# response = requests.request("get", "http://www.baidu.com/")
2.添加 headers 和 查询参数
如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。
如果要将参数放在url中传递,可以利用 params 参数。
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 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
post方法1.基本的post的请求
response = requests.post("http://www.baidu.com/",data = data)
2.body带参数
formdata = { "type": "auto", "doctype": "json", "key": "www", "ue": "utf-8",}url = "http://auto-installment/v1/loan-credit-check"response = requests.post(url,data = data,headers=headers) print(response.text)#显示返回结果print(response.json())# 如果是json文件可以直接显示
注意:
打印的结果出现中文乱码,使用json.dupms(response, ensure_ascii=false))解决
session一般利用session在跨请求的时候保持某些参数,比如实现登录后才能访问其他页面
# 1. 创建session对象,可以保存cookie值session = requests.session() # 2. 需要登录的用户名和密码data = {"username": "mxxxx", "password": "1233444"} # 3. 发送附带用户名和密码的请求,并获取登录后的cookie值,保存在ssion里session.post("https://www.jianshu.com/sign_in", data=data) # 4. ssion包含用户登录后的cookie值,可以直接访问那些登录后才可以访问的页面response = session.get("https://www.jianshu.com/writer#/")
踩坑记要1.在使用requests去请求一个接口时,出现报错的情况,但是这个接口本身却没有问题。这是因为接口的请求参数有两种情况:简单类型(一般少于3个)和复杂对象类型。
解决方法:在headers中定义一下这两种参数的类型
简单类型:headers={"content-type": "application/x-www-form-urlencoded"}
复杂对象类型:headers={"content-type":application/json}
2.某些https请求存在 ssl证书验证
解决方法:response = requests.get("https://www.baidu.com/", verify=false)
扩展1.requests请求失败后,增加重试机制(若失败,将会重试3次)
request_retry = requests.adapatrs.httpadapaters(max_retries=3)session.mount('https://',request_retry)
2.使用grequests实现异步请求
urls = [ 'http://www.url1.com', 'http://www.url2.com', 'http://www.url3.com', 'http://www.url4.com', 'http://www.url5.com',]resp = (grequests.get(u) for u in urls)grequests.map(resp)
3.自定义cookies
我们使用session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies
我们使用session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies
# 自定义cookiescookie = {'guid':'5bf0fab4-a7cf-463e-8c17-c1576fc7a9a8','uuid':'3ff5f4091f35a467'} session.post('http://', cookies=cookie)
4.统计一个api请求花费的时间
session.get(url).elapsed.total_seconds()
5.设置请求超时
session.get(url, timeout=15)
6.文件上传
requests利用files作为参数模拟提交文件数据
file = {'file':open('test.bmp','rb')} #rb表示用二进制格式打开指定目录下的文件,且用于只读r =requests.post('http://',files=file)print(r.text)
以上就是python如何使用requests请求网页的详细内容。
其它类似信息

推荐信息