IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 爬虫第三篇——requests高阶教程 -> 正文阅读

[网络协议]爬虫第三篇——requests高阶教程

爬虫requests高阶

一、SSL验证

这次我们用B站作为例子来进行讲解
首先,用requests模块来请求一下B站:

import requests

response = requests.get('https://www.bilibili.com/')
print(response.status_code)

运行:
在这里插入图片描述
这里返回了 200,没返回失败也是挺神奇的
如果有报错SSLError,表示证书验证错误,把verify参数设置为False即可

import requests

response = requests.get('https://www.bilibili.com/',verify = False) #requests设置移除SSL认证
print(response.status_code)

运行:
在这里插入图片描述
我们可以看到警告信息,警告:Adding certificate verification is strongly advised(缺少证书)
我们有两种方法可以消除这个警告
第一种:设置忽略警告

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get('https://www.bilibili.com/',verify = False)
print(response.status_code)

运行
在这里插入图片描述
第二种:通过捕获警告到日志来忽略警告

import requests
import logging

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

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

二、代理设置

import requests

proxies = {
    'http': '182.105.54.104:9000',
    'https': '182.105.54.104:9000',#无效代理,仅仅是个实例演示
}

requests.get('https://www.bilibili.com/', proxies = proxies)

因为这里用的是无效代理,所以直接运行会出现错误,可以自己用有效代理尝试一下,有问题请在评论区告诉我呀
运行:
在这里插入图片描述
如果代理需要HTTP Basic Auth,可以这样来写:

import requests

proxies = {
    'https':'http://user:password@182.105.54.104:9000/',#无效代理,仅仅是个实例演示
}
requests.get('https://www.bilibili.com/',proxies = proxies)

除了基本的HTTP代理,requests也支持SOCKS协议的代理,SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递
首先,安装SOCKS库

!pip install socks

在这里插入图片描述
安装之后就可以用SOCKS协议的代理了

import requests

proxy = '127.0.0.1:8080' #这里以本地代理作为示例,可以换成可用的进行测试
#proxy = 'username:password@127.0.0.1:8080'
proxies={
    'http':'https://'+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就可以了

三、超时设置

有时由于网络速度或服务器问题,爬取网页需要时间。访问一个网页,如果长时间未响应就会返回超时,这时就需要根据自己的需要,来设置超时时间——timeout

import requests

response = requests.get('https://www.bilibili.com/')
print(response.status_code)

运行:
在这里插入图片描述
timeout=1,表示我们将超时时间设置为了1秒,如果1秒内没有相应,就抛出异常。
实际上请求是分两步:连接时间和读取时间,这里的 timeout=1 里面的1指的是这两步所用时间的总和。
如果需要分别指定,可以通过元祖来实现,比如:

import requests

response = requests.get('https://www.bilibili.com/',timeout = (10,20))
print(response.status_code)

运行:
在这里插入图片描述
如果想要永久等待,有两种方法,一种是不设置,因为timeout的默认值是None,一种是将timeout设置为None

import requests

response = requests.get('https://www.bilibili.com/')
print(response.status_code)

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

import requests

response = requests.get('https://www.bilibili.com/',timeout = None)
print(response.status_code)

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

四、身份认证

在访问某些设置了身份认证的网站时,例如:点击打开,如果我们想要访问这个网站,就需要进行身份认证
在这里插入图片描述

4.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验证,加上之后:

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状态码
如果认证失败呢?

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状态码

4.2 摘要式身份认证

摘要认证是基于挑战-应答模式的认证模型,比基础认证更安全

import requests
from requests.auth import HTTPBasicAuth

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

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

五、总结

这一篇通篇都是以B站作为例子来展示,自己写的过程中遇到的问题比上一篇的要少,但是理解起来比上一篇要难,学的时候要好好记笔记、做总结,能感觉到自己在进步。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:06:46  更:2021-11-14 22:07:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:55:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码