爬虫的入门

本文最后更新于 2024年7月18日 凌晨

爬虫的基础知识

定义:爬虫(Web Crawler)是一种自动获取网页信息的程序或脚本,也称为网络蜘蛛(Spider)或网络机器人(Bot)

示例:想象一只蜘蛛在网上不断地爬行,查找并收集各种信息。搜索引擎(Google、Baidu)使用爬虫来自动抓取网页内容,以建立搜索引擎索引。

爬虫可以帮助我们快速、自动地获取互联网上的各种数据,包括新闻、价格、天气、股票数据等等,这些数据对于研究、分析和决策都非常有用

爬虫的用途

搜索引擎

数据分析

舆情分析

信息监控

信息聚合

应用开发

爬虫的分类

通用爬虫

通用爬虫是一种能够自动抓取互联网上各种网站信息的爬虫,它们不针对特定的网站,而是通过智能化的方式发现和抓取网页,比如百度、谷歌、必应等搜索引擎的数据都是通过通用爬虫实现的。通用爬虫一般用于搜索引擎等需要广泛收集网页信息的应用中,具有以下特点:

  • 广泛性:通用爬虫可以访问和抓取互联网上的绝大数网站,具有很强的覆盖能力。
  • 自动化:通用爬虫可以自动发现和抓取网页,无需人工干预,提高了效率
  • 智能化:通用爬虫通常会根据网页链接关系进行智能化的抓取,以尽可能全面地收集网页信息
  • 持续性:通用爬虫可以持续地抓取网页信息,保持数据的更新和完整性
  • 去重处理:通用爬虫会对抓取到的网页进行去重处理,避免重复抓取相同内容
  • 性能优化:通用爬虫会针对不同类型的网站和网络环境进行性能优化,提高抓取效率

聚焦爬虫

聚焦爬虫是一种针对特定网站或特定类型网站进行定制化开发的爬虫程序。与通用爬虫不同,聚焦爬虫的抓取范围更为有限,主要用于针对特定需求或特定网站的数据抓取,具有以下特点:

  • 定制性强:聚焦爬虫根据特定需求定制开发,可以针对性地抓取目标网站的特定信息
  • 精准度高:由于定位明确,聚焦爬虫可以精确地抓取目标网站的所需信息,减小无效数据的抓取
  • 效率高:消耗的资源更小
  • 隐蔽性强:聚焦爬虫一般不会频繁访问大量网站,降低了被目标网站封禁的风险
  • 数据处理:聚焦爬虫通常会对抓取到的数据进行分析处理,以便更好地满足特定需求
  • 定时更新:聚焦爬虫可以定时更新目标网站的数据,保持数据的新鲜性和有效性

增量式爬虫

增量式爬虫会在上一次抓取的基础上,只抓取新增加或有更新的数据,从而减少了重复抓取和提高了效率,增量式爬虫适用于需要频繁更新数据的场景,比如新闻网站、论坛等内容更新较快的网站。通过增量式爬虫,可以及时获取到最新的数据,保持数据的及时性和准确性

深层网络爬虫

深层网络爬虫专门用来抓取存在于互联网深层的页面,这些页面通常是非结构化的,需要通过特定的查询参数或请求才能访问,并且深层网络爬虫可能需要更多的技术和资源来实现高效的网页抓取

爬虫的工作流程

robots 协议

robots 协议(robots.txt)是一个位于网站根目录下的文本文件,用于指示搜索引擎爬虫哪些网站可以访问,哪些页面不可以访问,该文件包含一系列规则,定义了爬虫对网站的访问权限。

robots 协议的基本语法包括两个关键字:User-agent 和 Disallow

  • User-agent:指定了爬虫的名称和标识符
  • Disallow:指定了不允许被访问的 URL 路径

示例

注意:默认不要采集涉及到用户隐私的数据(名字、电话、地址、身份证号)

HTTP 和 HTTPS 协议

HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML 页面的方法。

HTTPS (HyperText Transfer Protocol over Secure Socket Layer)简单讲是 HTTP 的安全版,在 HTTP 下加入 SSL 层,确保数据在传输过程中的保密性和完整性。

SSL (Secure Sockets Layer 安全套接层)主要用于 Web 的安全传输协议,在传输层对网络连接进行加密,保障在 Internet 上数据传输的安全。

通俗的来讲,当你打开任何一个网站,查看它的地址是,你会发现前面都有这样一串符号 https:// 代表使用 HTTPS 协议去访问这个地址,当这个地址接受到我们的请求之后,它会按照 HTTPS 的一个规范给我们返回响应的数据,最后浏览器会把相应的数据解析成网页内容呈现在我们面前

  • HTTP 的端口号为80
  • HTTPS 的端口号为443

HTTP 的请求过程

HTTP 的通信过程分为两部分:客户端请求消息服务端响应消息 —— 请求-响应模型

  1. 浏览器先向地址栏中的 URL 发起请求,并获取响应
  2. 在返回的响应内容(HTML)中,会带有CSS、JS、图片等 URL 地址,以及 Ajax 代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
  3. 浏览器每获取一个响应就对展示出的结果进行添加(加载),JS、CSS等内容会修改页面中的内容,JS也可以重新发送请求,获取响应
  4. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改——这个过程叫做浏览器的渲染

URL 介绍

URL(Uniform Resource Locator,统一资源定位符),是用于完整描述 Internet 上网页和其他资源的地址的一种标识方法(通俗的叫法就是网址

HTTP 的请求信息

HTTP 请求报文

HTTP 和 HTTPS 的请求报文是一致的,所以我们只需要关注 HTTP 的请求报文。

URL 只是标识资源的位置,而 HTTP 是用来提交和获取资源。客户端发送一个 HTTP 请求到服务器的请求信息,包括以下格式

1
2
3
4
请求首行
请求头部
空行
请求数据

进入 Baidu 的请求示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: BIDUPSID=7A02C10EA3B82BDE3F82D16D08DA007E; PSTM=1721033437; H_PS_PSSID=60271_60364_60360; BD_HOME=1; BAIDUID=7A02C10EA3B82BDE3F82D16D08DA007E:FG=1; BAIDUID_BFESS=7A02C10EA3B82BDE3F82D16D08DA007E:FG=1; BD_UPN=12314753; BA_HECTOR=0101ag25048l808ka1a1040gbfmuq51j99omu1u; ZFY=u:AlQilDoFFw0OKY2nO16ol5xT2OzLVITdTQbcv5K0zE:C
Host: www.baidu.com
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

HTTP 请求方法

根据 HTTP 标准, HTTP 请求可以使用多种请求方法

HTTP 0.9:只有基本的文本 GET 功能

HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET、POST 和 HEAD 方法

HTTP 1.1:在 1.0 的基础上进行更新,新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE 和 CONNECT 方法

现在主流的版本是 1.1 版本

请求方法 对应的描述
GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。PUT 用于更新服务器上的资源
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。

爬虫主要用到的请求是 GET 和 POST

常用的请求头(了解)

  • Host:主机和端口号
  • Connection:链接类型
  • Upgrade-Insecure-Requests:升级为 HTTPS 请求
  • User-Agent:浏览器名称
  • Accept:传输文件类型
  • Referer:页面跳转处
  • Accept-Encoding:文件编码器格式
  • Accept-Language:语言种类
  • Content-Type:POST 数据类型
  • Cookie
  • x-requested-with:XMLHttpRequest —— 表示该请求是 Ajax 异步请求

HTTP 响应信息

HTTP 响应报文

HTTP 响应报文包括四个部分

1
2
3
4
状态行
消息报头
空行
响应正文

Set-Cookie (对方服务器设置 Cookie 到用户浏览器的缓存

服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。

为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息

  • Cookie:通过在客户端记录的信息确定用户的身份
  • Session:通过在服务器段记录的信息确定用户的身份

状态码范围

  • 100~199:表示服务器成功接受了部分请求,要求客户端继续提交其余请求才能完成整个处理过程
  • 200~299:表示服务器成功接受请求并已完成整个处理过程。常用 200(OK 请求成功)
  • 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的URL)、307和304(使用缓存资源)
  • 400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问、权限不够)
  • 500~599:服务器端出现问题,常用500(请求未完成,服务器遇到不可预知的情况)

HTTP 响应状态吗参考

200:成功
302:临时转移至新的URL。客户端应继续使用原有的URL进行未来的请求。
307:临时转移至新的URL。与302不同,客户端在重定向请求时必须使用原始的请求方法。
404:找不到该页面
500:服务器内部错误
503:服务不可用,一般是反爬虫


爬虫的入门
http://example.com/2024/07/18/pachong_1/
作者
Coder7
发布于
2024年7月18日
许可协议