1. 什么是网络爬虫
网络爬虫是指按照某种规则在网络上爬取所需内容的脚本程序。每个网页通常包含其他网页的入口,网络爬虫则是通过一个网址依次进入到网站,模拟客户端发送网络请求,接收请求响应,按照一定的规则,自动地抓取互联网信息的程序。
2. 爬虫分类
通用爬虫:是捜索引擎抓取系统(如Baidu)的重要组成部分,目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
爬取步骤:
- 第一步:抓取网页
- 第二步:数据存储
- 第三步:预处理
- 第四步:提供检索服务,网站排名
局限性:
- 通用搜索引擎所返回的结果都是网页,而大多情况下,网页里90%的内容对用户来说都是无用的。
- 不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
- 万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
- 通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
聚焦爬虫:在对网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。
增量式爬虫:用来监测网站数据更新情况,以便于爬取网站最新的数据。
分布式爬虫:提高爬虫效率的终极武器
3. 网络爬虫引发的问题
根据网络爬虫的尺寸分为三类:
爬取目的 | 规模 | 常用库 |
---|---|---|
爬取网页 玩转网页 | 小规模,数据量小,爬取速度不敏感(90%) | Requests库 |
爬取网站 爬取系列网站 | 中规模,数据规模大,爬取速度敏感(如携程) | Scrapy库 |
爬取全网 | 大规模,用于建立搜索引擎,爬取速度关键(如Google) | 定制开发 |
获得网络资源的同时也引发了一系列问题:
- 骚扰问题:对网站正常运行带来骚扰,给Web服务器带来巨大的资源开销
- 法律风险:服务器上的数据是由产权归属的,网络爬虫获取数据后牟利将带来法律风险
- 隐私泄露:具备一定突破简单访问控制的能力,获得被保护数据从而泄露个人隐私
网络爬虫限制
- 来源审查:通过判断User-Agent进行限制。检查来访HTTP协议偷的User-Agent域,只响应浏览器或者友好的爬虫访问。
- 发布公告:Robots协议。告诉爬虫策略,要求爬取数据者遵守规定的数据,是否遵守则要看爬虫者。
4. 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
URL格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
- scheme:协议(例如:http, https, ftp)
- host:服务器的IP地址或者域名
- port#:服务器的端口(如果是走协议默认端口,缺省端口80)
- path:访问资源的路径
- query-string:参数,发送给http服务器的数据
- anchor:锚(跳转到网页的指定锚点位置)
例:http://www.baidu.com
- scheme:http
- port#:http://www.baidu.com
URL的理解:URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
4.1 请求方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
HTTP请求主要分为Get和Post两种方法:GET是从服务器上获取数据,POST是向服务器传送数据
- GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即“Get”请求的参数是URL的一部分。例如:http://www.baidu.com/s?wd=Chinese
- POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,
4.2 常用的请求报头
名称 | 说明 |
---|---|
Host (主机和端口号) | 用于指定被请求资源的Internet主机和端口号,属于URL的一部分 |
Connection (链接类型) | 表示客户端与服务连接类型 |
Upgrade-Insecure-Requests (升级为HTTPS请求) | 升级不安全的请求,意思是会在加载http资源时自动替换成https请求 |
User-Agent (浏览器名称) | 客户浏览器的名称 |
Accept (传输文件类型) | 指浏览器或其他客户端可以接受的件类型,服务器可以根据它判断并返回适当的文件格式 |
Accept-Encoding(文件编解码格式) | 指出浏览器可以接受的编码方式 |
Accept-Charset(字符编码) | 指出浏览器可以接受的字符编码 |
Cookie (Cookie) | 浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能 |
Content-Type (POST数据类型) | POST请求里用来表示的内容类型 |
4.3 服务端响应状态码
类型 | 说明 |
---|---|
100-199 | 表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程 |
200-299 | 表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功) |
300-399 | 为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源) |
400-499 | 客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够) |
500-599 | 服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况) |
5. Robots协议
Robots协议(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,例如:
- 淘宝网Robots协议
- 腾讯网Robots协议
- 其它网站Robots协议是通过网页链接+/robots.txt即可查看
淘宝Robots协议分析
- User-agent: Baiduspider
- Disallow: /
- User-agent: baiduspider
- Disallow: /
Robots协议基本语法
- " * “代表所有 ,” / "表示根目录
- User-agent:表示允许哪些爬虫
- Disallow:不允许爬虫访问的资源目录
Robots协议的使用
- 网络爬虫:自动或者人工识别robots.txt,再进行内容爬取
- 约束性:Robots协议是建议但非约束性,网络爬虫课以不遵守,但存在法律风险
对Robots协议的理解
爬取目的 | 是否遵守 |
---|---|
爬取网页 玩转网页 | 可以遵守(访问量较小)、建议遵守(访问量较大) |
爬取网站 爬取系列网站 | 非商业且偶尔(建议遵守)、商业利益(必须遵守) |
爬取全网 | 必须遵守 |
类人类访问的爬取(资源都是为人类提供信息、且数据量小,次数少) | 可以不参考Robots协议 |
6. 反爬策略
反爬机制:作用于门户网站。如果网站不想让爬虫轻易获取数据,通过制定相关机制来阻值爬虫程序获取数据。
反反爬策略:作用于爬虫程序中。我们可以制定相关策略破解反爬机制从而获取数据。