爬虫(一):爬虫的基础知识 ---通用爬虫和聚焦爬虫,http和https协议,常见的响应状态码

一、爬虫的定义

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

二、爬虫可以解决的问题

  1. 解决冷启动问题
  2. 搜索引擎的根基。 —通用爬虫
  3. 帮助机器学习建立知识图谱
  4. 制作各种比价软件

三、爬虫工程师的进阶之路

初级爬虫工程师

  1. web前端的知识

    HTML、CSS、Javascript、DOM、DHTML、Ajax、jQuery、json等

  2. 正则表达式

    能提取正常一般网页中想要的信息,比如:某些特殊的文字,链接信息,知道什么是懒惰,什么是贪婪型的正则;

  3. 会使用 XPath 等获取一些 DOM 结构中的节点信息;

  4. 知道什么是深度优先,广度优先的抓取算法,以及实践中的使用规则;

  5. 能分析简单网站的结构,会使用 urllib 或 requests 库进行简单的数据抓取。

中级爬虫工程师

  1. 了解什么是 HASH ,会简单地使用 MD5,SHA1 等算法对数据进行 HASH 一遍存储
  2. 熟悉 HTTP,HTTPS 协议的基础知识,了解 GET,POST 方法,了解 HTTP 头中的信息,包括返回状态码,编码, user-agent , cookie ,sesssion 等
  3. 能设置 user-agent 进行数据爬取,设置代理等
  4. 知道什么是 Request,什么是 response,会使用 Fiddler 等工具抓取即分析简单地网络数据包;对于动态爬虫,要学会分析 ajax 请求,模拟制造 post 数据包请求,抓取客户端 session等信息,对于一些简单的网站,能够通过模拟数据包进行自动登录。
  5. 对于一些难搞定的网站学会使用 phantomjs + selenium 抓取一些动态网页信息
  6. 并发下载,通过并行下载加速数据爬取;多线程的使用

高级爬虫工程师

  1. 能够使用 Tesseract,百度 AI,HOG + SVM ,CNN等库进行验证码识别。
  2. 能使用数据挖掘技术,分类算法等避免死链。
  3. 会使用常用的数据库进行数据存储,查询。比如:MongoDB、redis等;学习如何通过缓存避免重复下载的问题。
  4. 能够使用机器学习的技术动态调整爬虫的爬取策略,从而避免被禁 IP 等。
  5. 能使用一些开源框架 scrapy,scrapy-redis 等分布式爬虫,能部署掌控分布式爬虫进行大规模数据爬取。

四、搜索引擎

1、什么是搜索引擎

​ 搜索引擎通过特定算法,从互联网上获取网页信息,将其保存到本地,为用户提供检索服务的一种程序。

2、搜索引擎的组成

搜索引擎主要是由通用爬虫组成的。

(1)通用爬虫:将互联网上的网页信息整体爬取下来的爬虫程序。

(2)搜索引擎的工作步骤:

  • 抓取网页
  • 数据存储
  • 预处理
    • 提取文字
    • 中文分词
    • 消除噪音
  • 设置网站排名(访问量),为用户提供检索服务

(3)为什么搜索引擎可以爬取所有的网页?—搜索引擎是如何爬取所有网页的

​ 一个网页就是一个 url ,这个问题其实在问,url的获取来源

url的获取来源:

  1. 新网站会主动提交网址给搜索引擎。
  2. 网页中的一些外链,这些 url 全部都会加入到通用爬虫的爬取队列。
  3. 搜索引擎和 dns 解析服务商合作,如果有新网站注册,搜索引擎就可拿到网址。

3、通用爬虫的缺陷

  • 通用爬虫是爬取整个网页,但是网页中 90% 的内容基本是没有用处的。
  • 不能满足不同行业,不同人员的不同需求。
  • 只能获取文字,不能获取音频,视频,文档等信息。
  • 只能通过关键字查询,无法通过语义查询。

4、聚焦爬虫

聚焦爬虫:在实施网页抓取的过程中,会对内容进行筛选,尽量保证只抓取与需求相关的信息的爬虫程序。

五、robots协议

定义:网络爬虫排除标准

作用:告诉搜索引擎哪些可以爬,哪些不能爬。

六、http 协议

1、什么是 http 协议

http 协议:是一种发布和接收 HTML 页面的方法,是规范。

2、http 和 https

http:超文本传输协议

https:http的安全版,在 http 下加入 SSL 层。

​ 对称加密----密钥

​ 非对称----私钥 + 公钥

​ 数字签证—

3、默认端口

http:80

https:443

Upgrade-Insecure-Requests : 1 ; 可以将 http 升级成 https 请求。

4、http 的特点

(1)应用层协议

(2)无连接

http 每次发送请求和响应的过程都是独立的。

在 http 1.0 以后,有请求头: connection:keep-alive 客户端和服务器建立长连接

(3)无状态

http 协议不记录状态

cookie 和 session 做到请求状态的记录。

cookie 是在客户端保存,session 是在服务器保存。

5、url 统一资源定位符

(1)主要作用:用来定位互联网上的任意资源的位置。

(2)为什么 url 可以定位任意资源?

组成:https://www.baidu.com/index.html?username=123&password=abc#top

scheme :协议----https

netloc:网络地址 ip:port ----www.baidu.com

  通过 ip 定位电脑,通过 port 定位应用

  192.168.92.10:80

path:资源路径。— index.html

query:请求参数。----?后面的内容 username=123&password=abc

fragment:锚点。 ---- top

原因:url 包含 netloc 可以定位电脑,path 定位资源,这样就可已找到任意资源

(3)特殊符号

 ?:后面就是请求参数

 &:连接请求参数

 #:锚点 — 如果 url 中有锚点,在爬虫程序中尽量去除

6、http 的工作过程


  1. 地址解析
    • 将 url 的所有组成部分分别解析出来
  2. 封装 http 请求数据包
    • 将第一步解析出来的信息进行装包。 — http 数据包
  3. 封装 tcp 数据包,通过三次握手建立 tcp
  4. 客户端发送请求
  5. 服务器发送响应
  6. 关闭 tcp 连接

7、当我们在浏览器输入一个 url ,浏览器加载出这个页面,中间做了哪些事?


  1. 客户端解析 url ,封装数据包,建立连接,发送请求。
  2. 服务器返回 url 对应资源文件给客户端,比如:index.html
  3. 客户端检查 index.html 是否有静态资源(引用外部文件),比如 js,css,图片。有的话在分别发送请求,来获取这些静态资源。
  4. 客户端获取所有静态资源,通过 html 语法,完全将 index.html 页面显示出来。

8、http 的请求方法

get 请求

  • get 获取服务器的指定资源
  • 涉及到筛选一些信息
  • 请求参数:主要拼接在 url 中
  • 不安全,别人可以通过 url 获取信息
  • 请求参数的大小受限

post 请求

  • post 向服务器提交数据
  • 请求数据是放在请求实体中的
  • 安全
  • 请求参数的大小不受限

9、客户端请求

(1)组成:请求行、请求头、空行、请求数据(实体)

  请求头:请求方法;host 地址,http 协议版本。

(2)请求头

user-agent:客户端标识。
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:请求的数据类型
	content-length:请求数据的长度

ajax请求必须封装的头:
	x-requested-with:XmlHttpRequest

10、服务器响应

(1)组成:状态行、响应头、空行、响应正文

(2)响应头:

Content-Type:text/html;charset=UTF-8

(3)状态码(面试常考):

常见状态码:

  • 1xx:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
  • 2xx:表示服务器成功接收请求并已完成整个处理过程。
    • 200:请求成功
  • 3xx:未完成请求,客户需进一步细化请求。
    • 302:重定向
    • 304:使用缓存资源
  • 4xx:客户端请求错误。(url写错了)
    • 404:服务器无法找到请求内容
    • 403:服务器拒绝访问,权限不够
  • 5xx:服务器错误。
    • 502:服务器错误
    • 500:请求未完成,服务器遇到不可知问题。

你可能感兴趣的:(爬虫)