【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!

全文总计5.5万字,免费分享数据采集和爬虫入门教程,最初目的是作者本人期末考试复习,内有概念解释、案例分析和通用代码!创作不易,麻烦点赞、收藏、关注!
本篇适合爬虫初学者以及期末复习同学!

数据采集和爬虫入门教程

  • 一、数据采集导论
    • (一)数据
      • 1、数据概念
      • 2、数据类型
      • 3、数据组织形式
      • 4、数据分析过程
    • (二)数据采集
      • 1、数据采集概念
      • 2、数据采集的三大要点
      • 3、数据采集数据源
      • 4、数据采集方法
    • (三)互联网大数据采集
      • 1、互联网大数据来源
      • 2、大数据定义
      • 3、互联网大数据特征
      • 4、互联网大数据采集场景
  • 二、数据采集基础
    • (一)网络基础概念
      • 1、URI和URL
      • 2、DNS
      • 3、超文本
    • (二)HTTP协议
      • 1、HTTP协议
      • 2、HTTP请求过程
      • 3、HTTP请求报文
      • 4、HTTP响应报文
      • 5、HTTPS协议
    • (三)Cookie
      • 1、Session和Cookie
      • 2、使用Cookie的状态管理过程
      • 3、Cookie的缺陷
      • 4、会话Cookie和持久Cookie
    • (四)网页基础
      • 1、HTML定义、常用标签
      • 2、CSS定义、语法、选择器
      • 3、js定义
      • 4、HTML结构树-DOM
    • (五) 编码体系及规范
      • 1、网页编码是什么
      • 2、具体编码形式
      • 3、python中的编码处理
    • (六)代理
      • 1、概念
      • 2、代理的作用
      • 3、爬虫代理
      • 4、代理分类
      • 5、代理实现举例
    • (七)Robots协议
      • 1、网络爬虫的危害和治理
      • 2、Robots协议的规范和实现
    • (八)反爬虫技术和反反爬虫技术
      • 1、反爬虫技术
      • 2、反反爬虫技术
  • 三、 爬虫介绍和关键策略
    • (一)爬虫介绍
    • (二)爬虫关键策略
      • 1、超链接爬行策略
      • 2、PageRank算法
      • 3、在线重要指数(OPIC)策略
      • 4、大站优先策略
  • 四 、页面爬取技术
    • (一)基于Requests的页面爬取
      • 1、Requests库介绍:
      • 2、Requests库基于HTTP协议的主要方法:
      • 3、响应对象属性
      • 4、通用代码
    • (二)动态Ajax页面爬取
      • 1、Ajax介绍
      • 2、如何爬取Ajax界面?
      • 3、基于微博动态Ajax网页爬取的通用代码
      • 4、备注:RequestException和raise_for_status()有什么区别?
      • 5、Ajax与JSON格式的关系
  • 五、页面解析技术
    • (一)Beautiful Soup
      • 1、Beautiful Soup 概念
      • 2、Beautiful Soup解析页面
      • 3、Beautiful Soup查找节点
      • 3、Beautiful Soup中的方法选择器
      • 4、Beautiful Soup CSS 选择器
      • 5、 Beautiful Soup 遍历文档树
    • (二)XPath
      • 1、XPath概念
      • 2、XPath解析页面
      • 3、XPath查找结点
      • 4、Xpath的节点轴
    • (三)正则表达式
      • 1、正则表达式概念
      • 2、正则表达式匹配规则
      • 3、 正则表达式匹配方法
      • 4、正则表达式修饰符
      • 5、`compile()` 方法和 `match()`、`search()`、`findall()`、`sub()` 等其他方法的关联?
      • 6、贪婪匹配和非贪婪匹配
  • 六、 页面存储技术
    • (一)TXT文本存储
      • 1、txt文本存储通用代码
      • 2、Open()函数详解
    • (二)JSON文件存储
      • 1、JSON定义
      • 2、Python 中解析 JSON 数据
      • 3、获取json中的内容
      • 4、Python 对象转换为 JSON 字符串
    • (三)CSV文件存储
      • 1、CSV定义
      • 2、通用CSV读取代码
  • 七、经典爬虫框架——Scrapy
    • (一)Scrapy 介绍
    • (二)Scrapy 结构
      • (三)Scrapy爬虫基本步骤

一、数据采集导论

(一)数据

1、数据概念

数据是记录、描述和识别事物的符号,通过有意义的组合来表达现实世界中某种实体的特征,数据用属性描述,属性也称为变量、特征、字段或维度等

2、数据类型

广义上的数据类型分为数字、图像、声音、文字

3、数据组织形式

计算机系统中的数据组织形式主要有两种,即文件和数据库。

4、数据分析过程

主要分为四个部分,分别是:数据采集和预处理、数据存储和管理、数据处理与分析、数据可视化

(二)数据采集

1、数据采集概念

数据采集又称数据获取,即通过各种技术手段把外部各种数据源产生的数据实时或非实时地采集并加以利用
数据采集范围多样,实际上包括网络数据采集、专利数据采集、社会信息采集、以及基于Hadoop架构的(日志采集,分布式消息数据采集,数据仓库中的数据采集)

2、数据采集的三大要点

通常分为三个方面,分别是全面性、多维性、高效性
(1)全面性:全面性是指确保数据采集覆盖到所有需要的数据,不漏一项,不误一点。只有全面收集数据,才能准确反映数据所在问题领域的情况,为后续数据分析和应用提供最充分的数据保障。在数据采集过程中,需要有完整的数据清单和采集计划,并对数据进行分类、标准化和控制,以确保所有必要数据都被收集。
(2)多维性:多维性是指收集数据时应该尽可能地覆盖数据领域中的各个层面和维度,包括时间、地域、产业、品类、用户等,从而能够获得全面、多角度的数据视角,为数据分析和应用提供更为精确的支持。
(3)高效性:高效性是指在数据采集过程中,需要充分利用采集工具和技术,以提高数据的采集速度和效率。例如,使用自动化采集技术、数据挖掘、机器学习等方式来增强数据采集效率,从而能够更快地获取、整理和分析数据。

3、数据采集数据源

通常来源于传感器、互联网数据、企业业务系统数据、日志文件

4、数据采集方法

主要分为四个方面,分别是网络数据采集、ETL、系统日志采集、分布式消息订阅分发
(1)网络数据采集是通过互联网爬取和采集网络上的各种信息,包括网页、图片、视频、音频等。网页抓取工具是网络数据采集的重要手段,通过这些工具可以自动化地获取特定网站或特定信息的数据。同时,还可以采用爬虫的方式进行网络数据采集,通过利用网站的结构性信息和规律性,将海量的网络数据快速地收集、处理和存储到本地数据库中。网络数据采集可以支持数据挖掘和分析,为商业智能、市场调研和竞争情报等方面提供基础数据。
(2)ETL(Extract,Transform,Load)是指数据从一个或多个来源提取、转换和加载到目标系统中的一系列数据处理过程。ETL是数据仓库和商业智能的核心处理程序,主要用于将数据库中存储的数据转换为决策支持信息。ETL工具通常具有可视化开发环境和复杂的数据处理和转换功能,支持从不同方面提取数据,并按照需求进行数据清洗、加密、过滤等处理。数据从ETL中导出到目标系统,被用于数据挖掘、商业智能等分析领域。
(3)系统日志采集是指对计算机系统和网络中日志信息的收集、处理和分析。日志是系统、应用和服务运行过程中记录事件的基础数据,记录着服务器、网络和设备的状态信息,以及用户行为和操作信息。通过对系统日志的采集、分析和挖掘,可以用于排查和解决系统性能问题,监测网络安全风险和异常行为,甚至是设备损坏等方面提供数据支持。
(4)分布式消息订阅分发是指分布式计算中与消息相关的数据采集和分发。它是一种基于事件驱动的数据传递机制,数据的收集播发全基于异步通信方式,系统的解耦性更强。生产者将数据发布到某个topic(主题)上,订阅者则从topic上订阅自己感兴趣的消息。分布式消息订阅分发技术能够实现数据采集系统的高效协作,并支持水平扩展、容错、负载均衡等各种高级特性,广泛用于云计算、大数据和物联网等领域。

(三)互联网大数据采集

1、互联网大数据来源

社交媒体、社交网络、百科知识库、评论信息、位置型信息

2、大数据定义

大数据是以容量大、类型多、存取速度快、价值密度低为主要特征的数据集合(5V:数量、多样性、速度、难辨识、数据价值)

3、互联网大数据特征

类型和语义更加丰富、数据规范程度较弱(数据的相似性、内容的不一致性、数据内涵的多样性)、数据流动性大、数据开放性更好、数据来源更加丰富、价值体现更加多样化。

4、互联网大数据采集场景

(1)采集型爬虫
定义:采集型爬虫:是一种通过互联网自动抓取并分析网页内容的程序,主要用于获取网络数据,如搜索引擎爬虫、数据采集爬虫等。采集型爬虫会跟随链接从一个页面到另一个页面,获取页面上的数据,并将这些数据存储到数据库或其他数据存储系统中。
主要应用:互联网搜索引擎、互联网舆情监测、知识图谱构建、社交媒体评论信息的检测、学术论文的采集、离线浏览

(2)检测型爬虫
定义:是一种由网站管理员或安全工程师使用的程序,目的是为了检测并识别恶意爬虫或者其他非法行为。检测型爬虫主要使用各种技术手段来区分常规访问和不良访问,如基于请求频率、请求来源、请求数据量等进行检测并进行相应的响应处理。
主要应用:应用安全检测、内容安全检测

二、数据采集基础

(一)网络基础概念

1、URI和URL

(1)URL为统一资源定位器,用来唯一标识一个资源,同时指明该资源的位置。
组成:协议头(schema)、服务器地址(host)、端口(port)、路径(path)

协议头表示的是访问资源和服务的协议(网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合)
服务器地址表示的的是资源所在主机的完全限定域名(比如:www.baidu.com)
端口:表示协议所使用的TCP端口号(HTTP协议默认端口号为80)
路径:指明服务器上某资源的位置,与端口一样,路径并非总是需要的。

(2)URN为统一资源命名,人们可以通过URN来指出某个资源,而无需指出其位置和获取方式。资源是无需基于互联网的
(3)URI(uniform resource identifier)统一资源表示符,用来唯一的标识一个资源。URI包括了URL和URN。

Schema 指的是 URL 中的协议类型,常见的 Schema 协议有:
http://:超文本传输协议,用于 Web 页面的传输和通信。
https://:安全的超文本传输协议,使用 SSL/TLS 加密技术来保护数据传输安全。
ftp://:文件传输协议,用于计算机之间的文件传输。
mailto://:电子邮件协议,用于发送邮件。
telnet://:远程登录协议,使用户能够在本地终端连接到远程主机并执行操作。
file://:本地文件协议,用于指定本地文件的路径,可以用于本地文件的查看和访问。
data::数据 URL 协议,将数据编码为 URL 的一部分,常用于编码图片、音频等数据。
irc://:Internet Relay Chat 协议,用于在线聊天室和实时讨论组。
git://:版本控制系统协议,主要用于 Git 版本控制系统的操作。
smb://:Server Message Block 文件共享协议,用于在 Windows 网络上共享文件和打印机等资源

2、DNS

(1)域名地址是由若干个英文字母或数字组成,主要用来对计算机的定位标识。
IP地址:是指互联网协议地址。 IP协议给因特网上的每台计算机和其它设备都规定了一个唯一的逻辑地址,叫做“IP地址”,保证在网络寻址时能够准确的找到相应的计算机。
域名系统(Domain Name System):它是互联网的一项服务,作为将域名和IP地址相互映射的一个分布式数据库,能够使人们更方便地访问互联网
(2)DNS缓存指的是DNS返回了域名对应的IP之后,系统将这个域名-IP对应结果临时存储起来,同时设置一个缓存有效期,在有效期内,再次访问网站就无需访问域名系统了,大大加速了网站访问的效率。

DNS访问的运行流程
1、主机向本地 DNS 服务器发送域名解析请求,本地 DNS 服务器通常由 ISP(互联网服务提供商)提供。
2、如果本地 DNS 服务器的缓存中已经存在相应的域名解析结果(即 IP 地址),则直接返回结果给主机;否则,本地 DNS 服务器向根 DNS 服务器发送请求。
3、根 DNS 服务器返回本地 DNS 服务器所需的顶级域服务器的地址。
4、本地 DNS 服务器向所需的顶级域服务器发送请求。
5、顶级域服务器返回本地 DNS 服务器所需的下一级域名服务器的地址,例如 .com 域的服务器地址。
6、本地 DNS 服务器向下一级域名服务器发送请求,并将请求逐级向下传递,直到找到所需的域名解析结果。
7、最后,本地 DNS 服务器将解析结果缓存起来并返回给主机,同时将结果保存在缓存中以便下次使用。

3、超文本

超文本(Hypertext ) 是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。详细的说,超文本(Hypertext)是一种基于计算机网络的文本形式,其特点是可以通过链接(hyperlinks)从一个文本节点跳转到另一个文本节点。每个节点可以包含多种媒体,例如文本、图像、音频和视频等,用户可以通过超链接在这些媒体之间自由导航。超文本是Web文档的基础,也是现代计算机技术发展过程中的关键技术之一。

(二)HTTP协议

1、HTTP协议

HTTP 全称超文本传输协议(Hyper Text Transfer Protocol, HTTP),是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档

2、HTTP请求过程

(1)域名解析
客户端将域名解析为IP地址,通常使用DNS进行域名解析。
(2)建立TCP连接
客户端使用TCP协议与Web服务器建立连接,这个连接通常称为“三次握手”,包含SYN、ACK、和FIN三个步骤,这个过程主要是客户端和服务器之间发送一些控制信息来同步连接的状态,确保双方能够正常通信。
(3)发送HTTP请求
客户端通过TCP连接发送HTTP请求包,HTTP请求包由请求行、请求头、请求体三部分组成。请求行含有请求方式(GET,POST等),请求的URL和对应的HTTP版本号。请求头包含请求的头部信息,例如客户端的User-Agent信息、客户端支持的压缩类型、以及请求服务器需要提供的信息等。请求体通常是POST请求时所携带的表单数据或者其他数据。
(4)服务器响应
服务器收到请求后,返回一个HTTP响应包,包含响应行、响应头和响应体三部分。响应行包含HTTP的版本号、返回的状态码和对应的文本描述。响应头包含响应的头部信息,例如服务器的类型、内容类型、响应的长度、以及其他信息。响应体通常包含一个HTML文件或者其他需要返回的内容。
(5)关闭TCP连接
当数据传输完成后,客户端与Web服务器之间的TCP连接被关闭,这个过程通常称为“四次挥手”。
【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第1张图片

Name:请求的名称,一般将URL最后一部分作为名称•Status:响应状态码,200代表响应正常
Type:请求文档类型,document代表我们请求的HTML文档Initiator:请求源,标记请求的对象,即哪一个脚本的哪一行触发了请求
Size:请求资源的大小,memory cache/ disk cache/资源大小如5K
Time:发起请求到响应的时间
Waterfall:请求的可视化瀑布流

3、HTTP请求报文

请求报文包括4部分内容:请求方法(RequestMethod),请求网址(RequestURL),请求头(RequestHeaders)和请求体(RequestBody)
GET 方法用来请求访问URL,并返回响应内容。POST 方法用来提交表单或上传文件,传输数据放在请体中。
GET请求的参数包含在URL里,数据显示在URL中,而POST请求的数据以表单形式传输,不体现在URL中,同时GET请求提交的数据最大为1024字节(512汉字),但是POST方法没有限制
请求头中的主要内容:【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第2张图片
请求体:一般承载的内容是PSOT请求中的表单数据,而对于GET请求,请求体为空

4、HTTP响应报文

响应报文包括:响应状态码(ResponseStatusCode),响应头(Response Header)和响应体(ResponseBody)
响应码:HTTP 响应码是客户端向服务器发出请求后,服务器返回的状态码,它们表示服务器对请求的处理结果
【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第3张图片

响应头中的主要部分:
【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第4张图片

响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码:请求一张图片时,它的响应体就是图片的二进制数据。编写爬虫后,我们主要通过响应体获取网页源代码、JSON数据等,基于响应体进行数据内容提取。

5、HTTPS协议

HTTPS全称HyperTextTransferProtocoloverSecureSocketLayer,是以安全为目标的HTTP通道,在HTTP下层加入SSL层(Secure Sockets Layer 安全套接字协议),通过SSL加密后实现资源的传输。

HTTPS的主要作用建立一个信息安全通道来保证数据传输的安全确认网站的真实性,凡是使用了HTTPS的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证后的真实信息,也可以通过CA机构颁发的安全签章来查询。

(三)Cookie

1、Session和Cookie

Session(会话):用来存储特定用户会话所需的属性及配置信息。使用Cookie来管理Session

Cookie 是一种用于在客户端和服务器之间传输数据的技术,可以用于实现用户身份验证、会话管理、状态保持等功能。它是由服务器发送给客户端的一小段文本信息,客户端将其保存在本地并在以后的请求中传递给服务器,服务器根据其中携带的信息进行相应的处理。

一般通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。

2、使用Cookie的状态管理过程

【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第5张图片

3、Cookie的缺陷

Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
由于在HTTP请求中的cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。

4、会话Cookie和持久Cookie

从表面意思来说,会话Cookie就是把Cookie放在浏览器内存里;浏览器在关闭之后该Cookie即失效;持久Cookie则会保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户登录状态。

其实严格来说,没有会话Cookie和持久Cookie之分,只是由Cookie的MaxAge域Expires学段决定了过期的时间。因此,一些持久化登录的网站其实就是把Cookie的有效时间和会话有效期设置得比较长,下次再访问页面时仍然携带之前的Cookie,就可以直接保持登录状态。

(四)网页基础

1、HTML定义、常用标签

(1)定义
HTML(超文本标记语言)是一种用于创建Web页面的标记语言。使用HTML,我们可以定义Web页面中的文本、图像、链接、列表、表格和其他一些元素。
HTML遵循标记语言的基本规则:结构-内容-样式。每一个HTML元素都由标签、属性和内容组成。标记用于定义起始和结束标记,属性用于提供有关标记的额外信息,内容用于说明标记的作用。

例如,下面是一个HTML的基本结构:
【收藏向】免费分享数据采集和爬虫入门教程!全文共计5.5W字,一篇文章带你走进爬虫世界!_第6张图片

在这个例子中,是需要指定文档类型的声明标记,标签是整个文档的根标签,标签包含了元素的元数据信息,如标题、关键字和描述等,标签包含了文档的主体内容,包括各种HTML元素,例如段落、标题等。
在HTML中还有许多其他类型的标记可以使用,例如图像标签、链接标签、列表标签