什么是爬虫:
爬虫就是一段自动抓取互联网的程序和脚本
网页的三大特性:
1、任何网页都有自己的唯一的URL地址(统一资源定位符)
2、网页都是通过HTML(超文本)来展示数据的
3、网页都是通过HTTP/HTTPS(超文本传输协议)来传输HTML的
爬虫的基本使用步骤:
1、寻找目标的URL(统一资源定位器),然后发起请求
2、获取响应结果,之后分析结果
3、从响应结果中提取我们所需要的数据
(1)、从网页中提取目标数据
(2)、如果还有新的url
地址,则提取,继续发起请求
4、所有的目标url
都请求完毕后,爬虫结束
数据用途:
1、爬取数据后自己写个网站
2、日常数据分析
爬虫的分类:(通用爬虫、聚焦爬虫)
通用爬虫:
是搜索引擎的重要组成部分
作用:
通过分词,去噪等进行颈处理,处理后进行数据的持久化,然后提取搜索
目的:
尽可能完全的将互联网上所有的网页下载到本地
聚焦爬虫:
是面向主题,面向需求的爬虫,只获取需求相关的数据
搜索引擎的缺点:
1、只能够获取简单的文件数据,大型的二进制数据(音频,视频)
2、搜索引擎搜索的结果都千篇一律,无法根据需求获取特定的数据
3、99%的结果都是属于无用的垃圾数据
OSI的七层协议的目的:
实现不同的系统互联之间的数据通讯,实现数据的传输
七层协议:
应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
应用层:http/htttps
- http(端口号为 80):从网络传输超文本数据到本地浏览器的传输协议
- https(端口号为 443):是HTTP的升级安全版,在HTTP的基础上添加了一个SSL层,用于安全传输
传输层:TCP/UDP
- TCP:网络传输协议,面向连接的,长连接,传输的是数据流,确保数据的安全性和完整性,但传输的效率非常的低
- UDP:网络传输协议,是非面向连接的,短链接,传输的是数据包,传输数据是不安全的,可能会造成数据的缺失,传输的速度非常快
URL的介绍
URL的组成:
- scheme:指的是协议(http/https)
- host:指的是服务器的IP后域名
- port:值得是端口号
- path:指的是资源路径
- query_string:URL地址后面的查询参数
- anchor(锚mao点) :定位,可以跳到制定的位置
URN:统一资源名称
URI:统一资源标志符
URL:统一资源定位符URI是URN和URL的父类
常见的5种请求方式
GET:只适用于服务器获取请求,在URL连接后面可能会跟一些查询参数
POST:向服务器端提交数据,数据会放在请求体中,一般用于添加或修改数据
DELETE:一般用来删除数据
PUT:更新整个资源(用来数据更新)
PATCH:局部的数据更新
GET
和POST
的请求区别
- 使用场景:GET是从服务器端提取数据,而POST是请求向服务器提交数据的
- 安全性:GET请求参数只能拼接在URL地址上,POST请求会在请求体中
- GET请求的URL是由长度限制的,而POST的请求可以添加很多字段
常见的请求头参数
User-Agent:这是设置浏览器(设置这个参数模拟浏览器请求对方服务器)
Cookie:保存在客户端中,保存的是用户信息
Referer:告诉客户端服务器当前的请求书从哪个界面跳转过来的
Accept:可以接受的数据类型
Cookie
和Session
:目的都是保持会话
- HTTP:请求是无状态的,每次请求断开后,在请求都是一个新的请求,请求状态会使用到Cookie和Session
- Cookie:保存在客户端,记录信息确认用户身份
- Session:保存在服务端,记录信息确认用户身份
常见的请求状态码:
2XX:请求成功
3XX:重定向
- 301:永久重定向
- 302:临时重定向
4XX:客户端请求错误 - 400:请求错误,服务器无法解析
- 401:未授权,没有身份验证
- 403:服务器拒绝访问
- 404:访问页面不存在,资源路径错误
- 405:请求方式不允许
- 408:请求超时
5XX:服务器错误 - 501:服务器内部错误
- 502:服务器暂时不具备完成请求的功能
- 503:服务器不可用
关于urllib中request,error,parse模块的使用
request:是基本的HTTP请求模块,可以用来模拟发送请求,就像在浏览器中输入完网址,后敲回车一样,使用时只需要给库方法传入相关的URL和相关的参数就可以了
error:异常处理模块,如果请求错误,可以使用这个模块来捕获异常,然后重试后其他操作,保证陈旭不会意外终止
parse:是一个工具模块,提供了很多的URL的处理方法,如拆分,解析,合并等
正则的使用及说明:
应为我们down下来的数据全是网页,数据太大而且还很混乱,大多数都是无用的数据,所以我们需要过滤和匹配出我们所需要的数据
- 正则表达式:别名正规表达式,正规表达法,规则表达式,常规表达法,正规表达式使用单个字符来描述、匹配一系列某个句法规则的字符串
目的:
1.给定的字符串判断是否符合正则表达式的逻辑过滤
2.可以通过正则表达式,从字符串中捕捉或获取我们所需要的特定部分
正则表达式语法支持情况
正则表达式匹配的规则如下:
将正则表达式编译使用符号
修饰符号 | 描述 |
---|---|
re.I | 使用匹配对大小写不敏感(不区分大小写) |
re.S | 使.匹配包括换行符在内的所有字符 |
re.M | 多行匹配 |
re.L | 做本地化识别 |
常用方法主要有:
- match 方法:从起始位置开始查找,一次匹配
- search 方法:从任何位置开始查找,一次匹配
- findall 方法:全部匹配,返回列表
- finditer 方法:全部匹配,返回迭代器
- split 方法:分割字符串,返回列表
- sub 方法:替换