爬虫requests高阶篇详细教程

文章目录

一、前言

二、SSL验证

三、代理设置

四、超时设置

        ​ 五、身份认证

1)基本身份认证

2)摘要式身份认证

 六、总结


一、前言

本篇文高阶篇,上一篇为基础篇,希望你一定要学完基础再来看高阶篇内容

基础篇文章可以看大佬写的这篇:requests基础篇

二、SSL验证

我们已12306网站为例子进行讲解。
首先我们请求一下12306:

import requestsresponse = requests.get('https://www.12306.cn/index/')
print(response.status_code)

运行结果:   返回:200:


在这里居然能返回200,按道理是应该失败的,如果你有报错SSLError,表示证书验证错误,把 verify 参数设置为 False 即可:

import requestsresponse = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

运行结果:

可以看到报错有个警告,让我们添加证书,我们可以通过设置忽略警告的方式来屏蔽这个警告

import requests
from requests.packages import urllib3urllib3.disable_warnings()
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

运行结果:

或者通过捕获警告到日志的方式忽略警告:

import logging
import requests
logging.captureWarnings(True)
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

运行:

三、代理设置

对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦开始大规模爬取,对于大规模且频繁的请求,网站可能会弹出验证码,或者跳转到登录认证页面,更甚者可能会直接封禁客户端的 IP,导致一定时间段内无法访问。
那么,为了防止这种情况发生,我们需要设置代理来解决这个问题,这就需要用到 proxies 参数。可以用这样的方式设置:

import requestsproxies = {'http': 'http://10.10.1.10:3128','https': 'http://10.10.1.10:1080',
}requests.get('https://www.taobao.com', proxies=proxies)

当然,直接运行这个实例可能不行,因为这个代理可能是无效的,请换成自己的有效代理试验一下(自己买)
若代理需要使用 HTTP Basic Auth,也可以这样写:

import requestsproxies = {'https': 'http://user:password@10.10.1.10:3128/',}
requests.get('https://www.taobao.com', proxies=proxies)

除了基本的 HTTP 代理外,requests 还支持 SOCKS 协议的代理。
首先,需要安装 socks 这个库:

!pip install socks

安装成功如下:

然后就可以使用 SOCKS 协议代理了,示例如下:

import requestsproxy='123.58.10.36:8080'  #本地代理
#proxy='username:password@123.58.10.36:8080'
proxies={'http':'http://'+proxy,'https':'https://'+proxy
}
try:response=requests.get('http://httpbin.org/get',proxies=proxies)print(response.text)
except requests.exceptions.ConnectionError as e:print('错误:',e.args)

运行:


你是不是想说我又在发无用代码,都是不可以用的?你要把我上面的ip换成有用的ip,你就可以成功了,为了避免被xx我就不演示了。

四、超时设置

在本机网络状况不好或者服务器网络响应太慢甚至无响应时,我们可能会等待特别久的时间才可能收到响应,甚至到最后收不到响应而报错。为了防止服务器不能及时响应,应该设置一个超时时间,即超过了这个时间还没有得到响应,那就报错。这需要用到 timeout 参数。这个时间的计算是发出请求到服务器返回响应的时间。示例如下:

import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog', timeout=1)
print(r.status_code)

运行结果:

通过这样的方式,我们可以将超时时间设置为 1 秒,如果 1 秒内没有响应,那就抛出异常。
实际上,请求分为两个阶段,即连接(connect)和读取(read)。上面设置的 timeout 将用作连接和读取这二者的 timeout 总和。如果要分别指定,就可以传入一个元组:

import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog', timeout=(10,20))
print(r.status_code)

运行结果:

如果想永久等待,可以直接将 timeout 设置为 None,或者不设置直接留空,因为默认是 None。这样的话,如果服务器还在运行,但是响应特别慢,那就慢慢等吧,它永远不会返回超时错误的。其用法如下: 

import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog', timeout=None)
print(r.status_code)

或直接不加参数:

import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog')
print(r.status_code)

运行结果:

五、身份认证

为什么认证?比如这个网址:点击打开

身份验证基本格式为: 

import requests  
from requests.auth import HTTPBasicAuth  r = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))  
print(r.status_code)

运行结果:

1)基本身份认证

此时可以使用 requests 自带的身份认证功能:

import requests  
from requests.auth import HTTPBasicAuth  r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('admin', 'admin'))  
print(r.status_code)

这样运行可还是会报错:这就是我们前面说到的SSL验证

因此我们加上SSL验证为: 

import requests  
from requests.auth import HTTPBasicAuth  r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('username', 'password'),verify=False)  
print(r.status_code)

运行结果:  返回401 认证失败

这个示例网站的用户名和密码都是 admin,在这里我们可以直接设置。

import requests  
from requests.auth import HTTPBasicAuth  r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('admin', 'admin'),verify=False)  
print(r.status_code)

运行结果:

如果用户名和密码正确的话,请求时会自动认证成功,返回 200 状态码;如果认证失败,则返回 401 状态码。
上面的代码可以直接简写如下: 

import requestsr = requests.get('https://static3.scrape.cuiqingcai.com/', auth=('admin', 'admin'),verify=False)
print(r.status_code)

运行结果:
在这里插入图片描述

2)摘要式身份认证

另一种非常流行的HTTP身份认证形式是摘要式身份认证Digest Authentication,Requests 对它的支持也是开箱即可用的:

import requests
from requests.auth import HTTPDigestAuth  
url = 'http://httpbin.org/digest-auth/auth/user/pass'  
requests.get(url, auth=HTTPDigestAuth('user', 'pass'))  

运行: 

六、总结

上一篇我们已经学会了基础篇教程,本篇是对上一篇内容的补充丰富,希望大家能和我一样通过跟随大佬打卡,不断进步不断成长。若本篇有不当之处,请大家多多指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八进制转换成十进制c语言程序,C语言程序 十进制、八进制、十六进制的相互转化...

#include#includevoid main(){//***************************************// 把十进制转化为十六进制与八进制//***************************************int number1;printf("请输入一个十进制的数:\n");scanf("%d",&number1);printf("%s\n %X\n…

Android Studio 创建第一个项目应用

选择打开"Start a new Android Studio project",新建一个Android项目。 选择一个空白的Activity,然后点击Next。 修改相应Android项目的名称、包名、项目位置等,以符合项目要求,点击Finish。 第一次创建项目可能会这样…

c语言教程我要自学网,超适合自学的C++基础视频_C++基础

教程列表:01_C基础课程的安排和需要持之以恒的学习态度02_简单的C程序helloworld03_用面向过程和面向对象方法求解圆形面积_类和对象的关系思考_传智扫地僧04_类中不写成员函数易犯错误模型05-易犯错误模型-为什么需要成员函数(补充资料)-传智扫地僧06_课堂答疑类中…

主成分分析(PCA)及其可视化——matlab

本文所用为matlab2016a matlab安装:待更新 matlab基础知识:待更新 如果本文内容已学会,可以看看python的哦 主成分分析(PCA)及其可视化——python_菜菜笨小孩的博客-CSDN博客 文章目录 一、主成分分析的原理 二…

Android studio真机调试

在我们进行Android开发的时候,调试这个环节是必不可少的也是至关重要的,使用真机调试可以更加准确清晰的显示效果。 真机调试Android应用 1.用数据线将手机连接到电脑,打开手机的开发者选项。 由于各个手机厂商的打开方式都不同&#xff0…

C语言伽罗华域乘法,伽罗瓦域上的乘法

一、前言伽罗瓦域上的乘法在包括加/解密编码和存储编码中经常使用,常见的AES 和Reed-Solomon 编码就使用了伽罗瓦域GF(28) 中的运算。以2 或者2w 形式的伽罗瓦域来说,加减法都是异或运算,乘法相对较复杂一些,本文就GF(2w) 上有限域…

主成分分析(PCA)及其可视化——python

可以看看这个哦python入门:Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客 如果你学会了python 可以看看matlab的哦 主成分分析(PCA)及其可视化——matlab_菜菜笨小孩的博客-CSDN博客 目录 一、主成分分析的原理 二…

Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

我们安装完毕Android Studio之后,创建第一个项目,我们想要使用模拟器进行运行,但是当我们启动模拟器的时候却发现无法启动,而且出现了错误信息。 首先我们要知道错误信息是什么? 提示信息的意思是说“avd系统路径找不…

c语言结构体多门成绩排序,c语言结构体按学号排序求大神帮忙改一下吧

struct record{char code[LEN1]; /* 学号 */char name[LEN1]; /* 姓名 */int age; /* 年龄 */char sex[3]; /* 性别 */char time[LEN1]; /* 出生年月 */char add[30]; /* 家庭地址 */char tel[LEN1]; /* 电话号码 */char mail[30]; /* 电子邮件地址 */}stu[N];int k1,n,m; /* 定…

多元线性回归模型-数学建模类-matlab详解

如果本文有点小难理解的话,可以看看我之前的基础线性规划啥的,有lingo,matlab还有python 就不给大家放链接了,想看的话,点击头像即可!! 文章目录 (1)一元线性回归之旧…

Session 'app': Installation did not succeed.The application could not be installed: INSTALL FAILED I

在Android Studio中使用模拟器进行调试的时候,会出现错误信息无法进行模拟器调试 错误信息 Session app: Installation did not succeed.The application could not be installed: INSTALL FAILED INSUFFICIENT STORAGE Retry要想解决这个问题,我们首先…

c语言音像店程序,音像店管理程序_C 课程设计.pdf

课 程 设 计 报 告课程名称 C 语言课程设计课题名称 音像店管理程序专 业 信息安全班 级 信安1501学 号 1151290113姓 名 李浩东指导教师 姜力争2016 年 1 月 1 日 课题设计内容与主要功能音像店管理程序设计一个利用文件处理形式实现音像店基本功能的程序,具有增…

手把手教你爬虫requests实战演练——python篇

文章目录 一、前言 二、实战 1)获取百度网页并打印 2)获取帅哥图片并下载到本地 4) 获取美女视频并下载到本地 5)搜狗关键词搜索爬取 6)爬取百度翻译 7)爬取豆瓣电影榜单 8)JK妹子爬取 总结&#xff…

Android studio 3.x 安装genymotion插件

在日常的Android开发中,模拟器是必不可少的,下面就给大家讲解一下如何在Android studio 3.x 安装genymotion插件。 对于Android studio 3.x之前的版本,可以直接在插件那里在线安装genymotion插件。 Android studio 3.0版本之后就搜索不到了…

给定4个数字组合的C语言算法,leetcode 454. 四数相加 II c语言

如题:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] B[j] C[k] D[l] 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - …

图片弹框

用js实现图片弹框的特效。 效果展示 代码展示 html内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title></head><body><img id"myImg" src"img/c_7…

最短路径和距离及可视化——matlab

文章目录 一、前言 二、最短路线 2.1 教程 2.1.1 sparse创建稀疏矩阵 2.1.2 有向图最短路径&#xff08;1&#xff09; 2.1.3 有向图最短路径&#xff08;2&#xff09; 2.1.4 无向图最短路径&#xff08;1&#xff09; 2.1.5无向图最短路径&#xff08;2&#xff09; …

c语言备忘录算法矩阵链乘,矩阵链乘法(备忘录法)

/** fileMemoMatrixchain.cpp* briefa solution of martrix chain with memorized way.* author/Univ.taoxiaoxiao/XMU* versionv1.0* date11-3-2013*///实例 A1-A6&#xff1a;30X35 35X15 15X5 5X10 10X20 20X25#include #include using namespace std;#define N 6#define IN…

没有bug队——加贝——Python 练习实例 1,2

目录 1.题目&#xff1a; 2.题目&#xff1a; 1.题目&#xff1a; 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的…

关闭线程 C语言,如何用C语言实现多线程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Windows操作系统&#xff0c;C语言实现多线程&#xff1a;#include #include DWORD APIENTRY ThreadOne ( LPVOID threadArg ){printf ( "线程开始啦&#xff0c;参数是&#xff1a;%s\n" , (char *)threadArg );return …