数据解析(Data Parsing)完全指南:网页爬取中的解析技术
当人们听到”网页爬取”这个词时,他们想到的是从网页上拉取数据。但他们不知道的是,大部分工作量不在于下载网页,而在于提取你需要的特定数据——这就是数据解析的用武之地。下载网页只需发送一个 HTTP GET 请求即可,但根据你需要的数据类型,从页面中提取数据可能会变得非常困难,尤其是在网页缺乏结构的情况下。
即使是结构化的页面,如果数据不嵌入特定的 HTML 标签而是与其他大段文本混在一起,也很难提取。比如电话号码、邮箱和家庭地址——如何从那些数据不位于特定标签中的在线论坛里解析出来?如果你对网页爬取有一点了解,你会知道这是整个过程中最困难的任务之一。但困难不代表做不到。
什么是数据解析?
数据解析这个词在计算机科学中应用广泛。对于做网页爬取和屏幕爬取的人而言,数据解析是从大段文本(可能是网页、PDF、文本文件甚至地图)中提取所需数据的过程。不同人不同背景看待它的方式不尽相同。
数据解析技术
解析 HTML 文档
最常被解析的文档是网页。大多数做网页爬取的人需要解析 HTML 文件。有两种选择:使用库或使用正则表达式。
使用解析库
最简单的方式是使用解析库。解析库将文档处理成 DOM 结构,让你可以通过标签、class 和 ID 等 CSS 选择器来访问数据。大多数解析库可免费使用,即使是商业用途。根据编程语言选择:
- Python:BeautifulSoup(纯解析库,最简单);Scrapy(爬取框架,内置解析功能)
- JavaScript:语言本身可操作 DOM,也可用 Cheerio
- Java:JSoup
- C#:AngleSharp
使用正则表达式
当你需要从非结构化的文本中提取邮箱、电话号码和地址等数据时,正则表达式(regex)是不二之选。因为解析库无法只挑出这些特定模式的数据。大多数编程语言都支持正则表达式,且模式是一致的。参考:regexr.com。
解析 PDF 文档
许多企业有从 PDF 中提取数据的需求。Python 开发者可使用 PyPDF2 或 PDFQuery。其他语言也有各自对应的工具。
解析纯文本文件
当需要从无结构的 .txt 文件中提取数据时,必须使用正则表达式。
总结
数据解析和获取文档本身同等重要。如今你有丰富的选项可以选择。对于结构化 HTML 文档,解析库是最简单的方式;对于非结构化文本中提取特定模式的数据,正则表达式是最佳工具。相关:Python 爬虫入门教程。