一、爬虫的定义
定义:程序或者脚本,自动爬取万维网的数据的程序或者脚本
二、爬虫可以解决的问题
- 解决冷启动的问题
- 搜索引擎的根基,(通用爬虫)
- 帮助机器学习建立知识图谱
- 制作各种比价软件
三、爬虫工程师
- 初级爬虫工程师
- web前端的知识:HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
- 正则表达式, 能提取正常一般网页中想要的信息,比如某些特殊的文字, 链接信息, 知道什么是懒惰, 什么是贪婪型的正则;
- 会使用 XPath 等获取一些DOM 结构中的节点信息;
- 知道什么是深度优先, 广度优先的抓取算法, 及实践中的使用规则;
- 能分析简单网站的结构, 会使用urllib或requests 库进行简单的数据抓取。
- 中级爬虫工程师
- 了解什么是Hash,会简单的使用MD5,sha1等算法对数据进行Hash一遍存储
- 熟悉HTTP,HTTPS协议的基础知识,了解GET,POST方法,了解HTTP头中的信息,包括返回状态码,编码,user-agent,cookie,session等
- 能设置user-agent进行数据爬取,设置代理等
- 知道什么是Request,什么是response,会使用Fiddler等工具抓取及分析简单地网络数据包;对于动态爬虫,要学会分析ajax请求,模拟制造post数据包请求,抓取客户端session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
- 对于一些难搞定的网站学会使用phantomjs+selenium抓取一些动态网页信息
- 并发下载,通过并行下载加速数据爬取;多线程的使用。
- 高级工程师
- 能够使用Tesseract,百度AI,HOG+SVM,CNN等库进行验证码识别。
- 能使用数据挖掘技术,分类算法等避免死链。
- 会使用常用的数据库进行数据存储,查询。比如mongoDB,redis;学习如何通过缓存避免重复下载的问题。
- 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁IP封禁等。
- 能使用一些开源框架scrapy,scrapy-redis等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。
四、搜索引擎
-
什么是搜索引擎?
通过特定的算法,从互联网上获取网页信息,将其保存在本地,为用户提供检索服务的一种程序。
-
搜索引擎的组成
- 通用爬虫:将互联网上的网页信息整体爬取下来的爬虫程序。
- 搜索引擎的工作步骤:
- 抓取网页
- 数据存储
- 预处理,(提问文字,中文分词,消除噪音)
- 设置网站排名(访问量),为用户提供检索服务
- 为什么搜索引擎可以爬取所有的网页?又是如何爬取所有网页的?
- 一个网页就是一个url,url的获取来源?
- url 的获取来源:
- 新网站会主动提交网址给搜索引擎。
- 网页中的一些外联,这些 url 全部都会加入到通用爬虫的爬取队列。
- 搜索引擎和 dns 解析服务商合作,如果有新网站注册,搜索引擎就可以拿到网址。
-
通用爬虫的缺陷
- 通用爬虫是爬取整个网页,但是网页当中 90% 的内容是基本没用的。
- 不能满足不同行业,不同用户的不同需求。
- 只能获取文字,不能获取音频,视频,文档等媒体文件。
- 只能通过关键字查询,无法通过语义查询。
-
聚焦爬虫
在试试网页抓取的过程中,会对内容进行筛选,尽量保证只抓取与需求相关的信息的爬虫程序。
五、robots协议
定义:网络爬虫排除标准。
作用:告诉搜索引擎那些可以爬取,那些不可以爬取。
六、Http协议
-
HTTP 和 HTTPS
HTTP协议(超文本传输协议):只一种发布和接收 HTML 页面的方法,亦可以说是一种约束。
HTTPS协议:简单来说,就是 HTTP 的安全版,在 HTTP 下加入 SSL 层。
HTTP 的端口号是80
HTTPS 的端口号是443
Upgrade-Insecure-Requests: 1:为 1 的时候可以将http升级成https请求。 -
HTTP 特点
- 应用层协议。
- 无连接:http 每次发送请求和响应的过程都是独立的。(在http 1.0以后,有请求头:connection:keep-alive:客户端和服务建立长连接。)
- 无状态:http 协议不记录状态,所以需要cookie 和 session 来记录请求状态。cookie 是保存在客户端的浏览器上的,session 是保存在服务器上的,依赖于cookie。
-
URL–统一资源定位符
-
主要作用:用来定位互联网上的任意资源的位置。
-
为什么 url 可以定位任意资源?
example:https://www.baidu.com/index.html?username=Ian&password=123456#topscheme,协议 -- https netloc,网络地址 -- ip:port -- www.baidu.com:443(通过ip 定位电脑,通过 port 定位应用) path,资源路径 -- index.html query,请求参数 -- ? 后面的内容:username=Ian&password=123456 fragment,锚点 -- top(跳转到网页的指定锚点位置)
-
特殊符号:
?:后面是请求参数
&:连接请求参数
#:锚点,如果url 中有锚点,在爬虫程序中尽量去除
-
-
HTTP 的工作原理
- 地址解析:将 url 的所有组成部分分别解析出来
- 封装 HTTP 请求数据包,将第一步解析出来的信息进行装包(http数据包)。
- 封装 TCP 数据包,通过三次握手建立TCP。
- 客户端发送请求。
- 服务器发送响应。
- 关闭 TCP 连接。
-
浏览器是如何实现加载一个完整的页面的?
- 客户端解析 url,封装数据包,建立连接,发送请求。
- 服务器返回url 对应资源文件给客户端,比如:index.html。
- 客户端检查响应是否有静态资源(是否引入外部文件),比如 js,css,image等。如果有的话在分别发送请求获取这些静态资源。
- 客户端获取所有静态资源,通过HTML 语法,完全将 index.html 页面显示出来。
-
http 请求的方法
get请求:get(获取)— 获取服务器的指定资源 — 涉及到筛选一些信息 — 请求参数:主要拼接在url中 — 不安全(别人可以通过url获取信息)— 请求参数的大小受限。
post请求:post(邮递)— 向服务器传递数据 — 请求数据是方法在请求实体中的 — 安全 — 大小不受限。
-
客户端请求
组成:请求行,请求头,空行,请求数据(实体)
请求头:
- user-agent:客户端标识。
- accept:允许传入的文件类型。(Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3)
- Referer:标识产生请求的网页来自于哪个网页。
- cookie:cookie信息。—现在很多网站,必须封装cookie才给数据。
post重要的请求头:
- content-type:post请求的数据类型
- content-length:post请求数据的长度。
ajax 请求必须封装的头:
- x-requested-with:xmlhttprequest
-
服务器响应:
组成:状态行,响应头,空行,响应正文。
- 响应头:Content-Type:text/html;charset=UTF-8
- 状态码(面试常考):
- 100-199:表示服务器成功接收部分请求,还需要发剩余请求才能处理整个过程。(处理了一半)
- 200-299:标识服务器成功接收请求并处理完整个过程。(成功)
200:请求成功 - 300-399:为了完成请求,客户端需要进一步细化请求。
302:重定向
304:使用缓存资源 - 400-499:客户端请求错误。(url写错了)
403:服务器拒绝访问,权限不够
404:服务器无法找到请求内容 - 500-599:服务器错误。
500:请求未完成,服务遇到不可知问题
502:服务器错误
来源:CSDN
作者:铭铭铭铭天
链接:https://blog.csdn.net/weixin_45542045/article/details/103585816