根据使用场景,网络爬虫可分为 通用爬虫
和 聚焦爬虫
两种。
1.通用爬虫
通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo 等)的重要组成部分。
主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
通用性搜索引擎也存在着一定的局限性:
-
通用搜索引擎所返回的结果都是网页,而大多情况下,网页里 90%的内容对用户来说都是无用的。
-
不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
-
万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
-
通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
2.聚焦爬虫
聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:
聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
3. HTTP 和 HTTPS
HTTP 协议
(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法,是规范,买卖东西一样。
HTTPS
(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是 HTTP 的安全版,在 HTTP 下加入 SSL 层。
SSL
(Secure Sockets Layer 安全套接层)主要用于 Web 的安全传输协议,在传输层对网络连接进行加密,保障在 Internet 上数据传输的安全。
HTTP 的端口号为 80,
HTTPS 的端口号为 443
3.1 HTTP 工作原理
网络爬虫抓取过程可以理解为 模拟浏览器操作的过程。
浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示您选择的网络资源,HTTP 是一套计算机通过网络进行通信的
规则。
HTTP 通信由两部分组成:客户端请求消息
与 服务器响应消息
。
浏览器发送 HTTP 请求的过程:
1) 当用户在浏览器的地址栏中输入一个 URL 并按回车键之后,浏览器会向 HTTP 服 务器发送HTTP 请求。
HTTP 请求主要分为“Get”
和“Post”
两种方法。
2) 当我们在浏览器输入 URL: http://www.baidu.com 的时候,浏览器发送一个 Request 请求去获取 html 文件,服务器把 Response 文件对象发送回给 浏览器。
3) 浏览器分析 Response 中的HTML,发现其中引用了很多其他文件,比如 Images 文 件,CSS 文件,JS 文件。浏览器会自动再次发送 Request去获取图片,CSS 文件,或者 JS 文件。
4)当所有的文件都下载成功后,网页会根据 HTML 语法结构,完整地显示出来。
GET 是从服务器上获取数据,POST 是向服务器传送数据。
GET 请求参数显示,都显示在浏览器网址上,HTTP 服务器根据该请求所包含 URL 中的参数来产生响应内容 ,即 “Get” 请 求 的 参 数 是 URL 的 一 部 分 。 例 如 :
http://www.baidu.com/s?wd=Chinese
POST 请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向 HTTP 服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码。
注意:避免使用 Get 方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用 Get 方式,用户输入的用户名和密码将在地址栏中暴露无遗。
3.2 请求报头Connection:客户端与服务器连接的类型。
Connection:keep-alive 的响应
Connection:close 的响应
keep-alive 在很多情况下能够重用连接,减少资源消耗,缩短响应时间,比如当浏览器需要多个文件时(比如一个 HTML 文件和相关的图形文件),不需要每次都去请求建立连接。
3.3 User-Agent ( 指客户浏览器名称 )
3.4 Referer ( 页面跳转处 )
Referer:
表明产生请求的网页来自于哪个 URL,用户是从该 Referer 页面访问到当前请求的页面。这个属性可以用来跟踪 Web 请求来自哪个页面,是从什么网站来的等。
有时候遇到下载某网站图片,需要对应的 referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据 referer 去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载。
3.5 Accept-Encoding (文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。
举例:
Accept-Encoding:gzip;q=1.0, identity; q=0.5,*;q=0
如果有多个 Encoding 同时匹配, 按照 q 值顺序排列,本例中按顺序支持 gzip,identity 压缩编码,支持 gzip 的浏览器会返回经过 gzip 编码的 HTML 页面。
如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
3.6 Accept-Language (语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如 en 或 en-us 指英语,zh或者 zh-cn 指中文,当服务器能够提供一种以上的语言版本时要用到。
3.7 cookie
cookie:浏览器用这个属性向服务器发送 cookie。cookie 是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
3.8 Content-Type (POST 数据类型 )
Content-Type:POST 请求里用来表示的内容类型。
举例:
Content-Type = Text/XML; charset=gb2312:指明该请求的消息体中包含的是纯文本的 XML
类型的数据,字符编码采用“gb2312”。
3.9 服务端 HTTP 响应
HTTP 响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文
Response.status_code 状态码
Response.content 二进制流
Response.text 拿到页面源码
Response.json() 如果数据类型为 json,就用这种方式来取json 数据。
3.10 响应状态码(面试常考)
响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态码:
100~199:
表示服务器成功接收部分请求,
要求客户端继续提交其余请求才能完成整个处理过程。
200~299:
表示服务器成功接收请求并已完成整个处理过程。常用 200(OK 请求成功)。
300~399:
为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、
常用 302(所请求的页面已经临时转移至新的 url)、
307 和 304(使用缓存资源)。
400~499:
客户端的请求有错误, 常用 404 ( 服务器无法找到被请求的页面 ) 、403 ( 服务器拒绝访问,权限不够---DDos )。
500~599:
服务器端出现错误,常用 500(请求未完成。服务器遇到不可预知的情况)。
4 cookie 和 和 session
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为是新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
cookie:通过在客户端记录的信息确定用户的身份。
session:通过在服务器端记录的信息确定用户的身份。