写在前面
因为最近在中国大学MOOC网上学习嵩天老师(北京理工大学)的爬虫课程,所以为了方便自己以后编程时查找相关函数和方法,也为了方便各位小伙伴们学习,整理这篇关于爬虫中Requests库的基本知识点。本篇涉及图的地方,我会截取课程内容的截图(因为我实在是懒得画图了),涉及表的地方我会重新制作,一是为了美观,二是为了加深印象,因为函数和方法太多不常用的话就会遗忘。好了。话不多说,开干!
一、Requests库入门
1.Requests库的安装
(1)安装Requests库
使用管理员权限打开command控制台
输入如下代码即可安装
pip install requests
(2)测试Requests库
测试代码:
import requests
r = requests.get("http://www.baidu.com")
r.status_code #检测请求网页的状态码
#输出200
r.encoding = 'utf-8'
r.text
#输出网页内容
2.Requests库的get()方法
(1) get()方法简介
r.requests.get(url) 构造一个向服务器请求资源的requests对象,返回一个包含服务器资源的requests对象
requests.get(url,params=None,**kwarge)
url:获取页面的url链接
params:url中的额外参数,字典或字节流格式
**kwargs:12个控制访问的参数
Request:构造一个向服务器请求资源的Request对象
Response:返回一个包含服务器资源的Response对象
(2) Response对象的属性
属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即 url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
注
r.encoding:如果header中不存在charset字段,则认为编码为 ISO-8859-1
3.爬取网页通用的代码框架
(1)理解Requests库的异常
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生异常 |
(2)通用代码框架
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status() #如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding #使得返回内容的解码是正确的
return r.text
except:
return “产生异常”
if _name_==”_main_”:
url=”http://baidu.com”
print(getHTMLText(url))
4.Http协议
(1)URL和URI
URL是URI的子集,URI还包括URN,在互联网中,我们一般的网页链接可以被称为URL或者URI,大多数人称为URL。
URL:URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
(2)超文本
我们平常在网站浏览的网页就是超文本解析而成的,这些源代码是一系列的HTML代码,如img:显示图片,p:指定显示段落等。HTML可以被称为超文本。
(3)http协议介绍
HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识
URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
(4)http协议和https协议的区别
http:
- 超文本传输协议
- 默认端口:80
https:
- HTTP+SSL(安全套接字层)
- 默认端口:443
https比http更加安全但是性能更低
(5)http协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,覆盖原URL位置的资源 |
DELETE | 请求删除URL位置存储的资源 |
5.Requests库方法
方法 | 说明 |
---|---|
requuests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML网页提交删除请求,对应于HTTP的DELETE |
6.Requests方法的13个访问控制参数
参数名 | 说明 |
---|---|
params | 字典或字节序列,作为参数增加到url中 |
data | 字典、字节序列或文件对象,作为Request的内容 |
json | JSON格式的数据,作为Request的内容 |
headers | 字典、HTTP定制头 |
cookies | 字典或CookieJar,Request中的cookie |
auth | 元组,支持HTTP认证功能 |
files | 字典类型,传输文件 |
timeout | 设定超时时间,秒为单位 |
proxies | 字典类型,设定访问代理服务器,可以增加登录认证 |
allow_redirects | True/False,默认为True,重定向开关 |
stream | True/False,默认为True,获取内容立即下载开关 |
verify | True/False,默认为True,认证SSL证书开关 |
cert | 本地SSL证书路径 |
二、网络爬虫的“盗亦有道”
1.网络爬虫引发的问题
(1)骚扰问题:受限于编程水平和目的,网络爬虫将会为web服务器带来巨大的资源开销。
(2)法律风险:服务器上的数据有产权归属,网络爬虫获取数据后牟利将会带来法律风险
(3)隐私泄露:网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄露个人隐私
2.网络爬虫的尺寸
(1)小规模,数据量小,爬取速度不敏感,Requests库 ;爬取网页,玩转网页
(2)中规模,数据规模较大,爬取速度敏感,Scrapy库;爬取网站,爬取系列网站
(3)大规模,搜索引擎,爬取速度关键,定制开发;爬取全网
根据使用场景,爬虫可以也分为两类:
(1)通用爬虫:是搜索引擎抓取系统的重要组成部分
(2)聚焦爬虫:面向特点网页的一种网络爬虫程序
3.网络爬虫的限制
(1)来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
(2)发布公告:Robots
4.Robots协议
Robots Exclusion Standard 网络爬虫排除标准
作用:告知所有爬虫网站的爬取策略,要求爬虫遵守。
形式:在网站的根目录下的robots.txt文件
使用:自动或人工识别robots.txt,再进行内容爬取,协议可以不遵守,但可能存在法律风险
类人类行为可不遵守,如写小程序一天访问几次服务器
三、Requests库网络爬虫实战(五个实例)
这五个实例我在博客中有写过完整的解析,感兴趣的小伙伴可以点过去看一下,传送门送给大家。
实例1:淘宝商品页面的爬取
https://blog.csdn.net/weixin_44578172/article/details/109301305
实例2:亚马逊商品页面的爬取
https://blog.csdn.net/weixin_44578172/article/details/109323613
实例3: 百度360搜索关键词提交
https://blog.csdn.net/weixin_44578172/article/details/109349554
实例4: 网络图片的爬取和存储
https://blog.csdn.net/weixin_44578172/article/details/109377336
实例5: IP地址归属地的自动查询
https://blog.csdn.net/weixin_44578172/article/details/109376326
本篇完,如有错误欢迎指出~
引用源自
中国大学MOOC Python网络爬虫与信息提:https://www.icourse163.org/course/BIT-1001870001
互联网博客:https://www.datealive.top/2020/05/python-pc/
CSDN博客:https://blog.csdn.net/songhui1024/article/details/84575575
写在最后
本篇属于整理总结类型文章,整理不易,如果对你有帮助的话,欢迎收藏喔~
ps:一键三连更好啦~