博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.爬虫 requests库讲解 高级用法
阅读量:5342 次
发布时间:2019-06-15

本文共 3582 字,大约阅读时间需要 11 分钟。

0.文件上传

import requestsfiles = {
'file': open('favicon.ico', 'rb')}response = requests.post("http://httpbin.org/post", files=files)print(response.text)

 

1.获取cookies

import requestsresponse = requests.get("https://www.baidu.com")print(response.cookies)for key, value in response.cookies.items():    print(key + '=' + value)

 

2.会话维持

import requestsrequests.get('http://httpbin.org/cookies/set/number/123456789')response = requests.get('http://httpbin.org/cookies')print(response.text)

*可以通过http://httpbin.org/cookies/set/number/123456789对这个网址设置个cookies

输出结果如下:

 

{  "cookies": {}}

 

为空?!因为两次get请求,实际上相当于你用两个浏览器打开了不同的网页。用Session()方法试试?

import requestss = requests.Session()s.get('http://httpbin.org/cookies/set/number/123456789')response = s.get('http://httpbin.org/cookies')print(response.text)

输出结果如下:

{  "cookies": {    "number": "123456789"  }}

* 用Session()我们实现了维持会话登陆模拟登陆(即用于模拟在一个浏览器中打开同一站点的不同页面)

 

 

3.证书验证

import requestsresponse = requests.get('https://www.12306.cn')print(response.status_code)# 提示出现SSLError表示证书验证错误 ########################去除警告import requestsfrom requests.packages import urllib3 urllib3.disable_warnings()response = requests.get('https://www.12306.cn', verify=False)print(response.status_code)########################指定一个本地证书用作客户端证书import requestsresponse = requests.get('https://www.12306.cn', cert=('/path/server.crt', '/path/key'))print(respo nse.status_code)

 

4.代理设置

#无密码的import requestsproxies = {  "http": "http://127.0.0.1:9743",  "https": "https://127.0.0.1:9743",}response = requests.get("https://www.taobao.com", proxies=proxies)print(response.status_code)###############################有密码的import requestsproxies = {    "http": "http://user:password@127.0.0.1:9743/",}response = requests.get("https://www.taobao.com", proxies=proxies)print(response.status_code)###############################代理不支持http,支持sockes#pip3 install 'requests[socks]'import requestsproxies = {    'http': 'socks5://127.0.0.1:9742',    'https': 'socks5://127.0.0.1:9742'}response = requests.get("https://www.taobao.com", proxies=proxies)print(response.status_code)

 

5.超时设置

import requestsfrom requests.exceptions import ReadTimeouttry:    response = requests.get("http://httpbin.org/get", timeout = 0.5)    print(response.status_code)except ReadTimeout:    print('Timeout')

 *timeout = (5,30) 5是连接超时时间 30是读取超时时间

 *timeout = 35 35是连接和读取两者之和

*timeout = None 或者我不设置 代表永久等待

 

6.认证设置

import requestsfrom requests.auth import HTTPBasicAuthr = requests.get('http://120.27.34.24:9001', auth=HTTPBasicAuth('user', '123')) #还可以像下面这样写 简单些(默认使用HTTPBasicAuth这个类来认证 当然这个网址访问不了的) #r = requests.get('http://120.27.34.24:9001', auth=('user', '123')) print(r.status_code)

 

7.异常处理

import requestsfrom requests import ReadTimeout, ConnectionError, RequestExceptiontry:    response = requests.get("http://httpbin.org/get", timeout = 0.5)    print(response.status_code)except ReadTimeout:    print('Timeout')except ConnectionError:    print('Connection error')except RequestException:    print('Error')

*可以去requests库的官方文档,找到API,再看里面的异常!!

 

8.Prepared Request

*在urllib里,可以将请求表示为数据结构,其余各个参数都可以通过一个Request对象来表示.

*在requests里,用Prepared Request同样可以做到!

from requests import Request,Sessionurl = "..."data = {
'...':'...'}headers = {
'User-Agent':'...'}s = Session()req = Request('POST',url,data = data,headers = headers)prepped = s.prepare_request(req)r = s.send(prepped)print(r.text)

*在这里,我们引入Request,然后用url、data、headers参数构造了一个Requests对象,这时候调用Session的prepare_request()方法将其转换为一个Prepared Request对象,然后再调用send方法发送即可。

*有了这个Requests对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便。

 

转载于:https://www.cnblogs.com/DC0307/p/10679932.html

你可能感兴趣的文章
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>
Linux目录结构
查看>>
LeetCode-Strobogrammatic Number
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
(转)接口测试用例设计(详细干货)
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>
win8.1安装Python提示缺失api-ms-win-crt-runtime-l1-1-0.dll问题
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
Spring mvc初学
查看>>
有意思的代码片段
查看>>
C8051开发环境
查看>>