in

什么是数据解析?

什么是数据解析

数据解析是将一种格式的数据,转换为另一种格式的过程。你会发现解析器的使用无处不在。当我们需要解析计算机代码并生成机器代码时,它们通常被用于编译器中。

当开发者编写的代码在硬件上运行时,这种情况经常发生。解析器也存在于SQL引擎中。SQL引擎解析一个SQL查询,执行它,并返回结果。

在网页爬取的情况下,这通常发生在通过网页爬取从网页上提取数据后。一旦你从网络上爬取了数据,下一步就是使其更可读,更适合分析,以便你的团队能够有效地使用这些结果。

一个好的数据分析器并不拘泥于特定的格式。你应该能够输入任何数据类型并输出不同的数据类型。这可能意味着将原始HTML转化为JSON对象,或者他们可能从JavaScript渲染的页面中获取数据,并将其变为一个全面的CSV文件。

解析器在网页爬取中被大量使用,因为我们收到的原始HTML并不容易被理解。我们需要将数据改变成一个人可以解释的格式。这可能意味着从HTML字符串中生成报告或创建表格来显示最相关的信息。

尽管解析器有多种用途,但这篇博文的重点将是用于网页爬取的数据解析,因为这是一种成千上万的人每天都在处理的在线活动。


如何建立一个数据分析器

无论你选择什么类型的数据解析器,一个好的解析器会根据预先定义的规则,从HTML字符串中找出哪些信息是有用的。解析过程通常有两个步骤,词法分析和句法分析。

词汇分析是数据解析的第一步。它基本上是从作为非结构化数据(如HTML)的字符串进入分析器的字符序列中创建标记。解析器通过使用关键词和定界符等词汇单位来制造标记。它还会忽略无关的信息,如空白和注释。

在解析器分离了词汇单元和不相关信息之间的数据后,它抛弃了所有的不相关信息,并将相关信息传递给下一个步骤。

数据解析过程的下一个部分是句法分析。这是解析树建立的地方。解析器从词法分析步骤中获取相关的标记,并将它们排列成一棵树。任何进一步的不相关的标记,如分号和大括号,都被添加到树的嵌套结构中。

一旦解析树完成,那么你就会留下结构化格式的相关信息,可以保存为任何文件类型。有几种不同的方法来建立一个数据分析器,从以编程方式创建一个到使用现有的工具。这取决于你的业务需求,你有多少时间,你的预算是多少,以及其他一些因素。

为了开始,让我们看一下HTML解析库。

HTML解析库

HTML解析库是为你的网页爬取流程增加自动化的好东西。你可以通过API调用将这些库中的许多库连接到你的网页爬取器,并在你收到数据时进行解析。

这里有几个流行的HTML解析库。

Scrapy或BeautifulSoup

这些都是用Python编写的库。BeautifulSoup是一个用于从HTML和XML文件中提取数据的Python库。Scrapy是一个数据分析器,也可用于网页爬取。当涉及到用Python进行网页爬取时,有很多选择,这取决于你想如何亲身体验。

Cheerio

如果你习惯于用Javascript工作,Cheerio是一个不错的选择。它可以解析标记,并提供一个API来操作所产生的数据结构。你也可以使用Puppeteer。这可以用来生成特定页面的屏幕截图和PDF,可以保存并进一步用其他工具进行解析。还有许多其他基于JavaScript的网页爬取器和网络解析器

JSoup

对于那些主要用Java工作的人来说,也有一些选择适合你。JSoup是一个选择。它允许你通过它的API来处理真实世界的HTML,以获取URL并提取和处理数据。它既是一个网页爬取器,也是一个网络解析器。要找到其他开源的Java选项可能很有挑战性,但它绝对值得一看。

Nokogiri

看一下Nokogiri。它允许你用HTML和HTML与Ruby一起工作。它有一个类似于其他语言包的API,可以让你查询你从网页爬取中获取的数据。它增加了一个额外的安全层,因为它默认将所有的文档都视为不可信任的。在Ruby中进行数据解析可能很棘手,因为它可能更难找到你可以使用的宝石。

正则表达式

现在你已经知道有哪些库可以满足你的网页爬取和数据解析需求,让我们来解决HTML解析的一个常见问题,即正则表达式。有时,数据在HTML标签中没有很好的格式化,我们需要使用正则表达式来提取我们需要的数据。

你可以建立正则表达式,从困难的数据中准确地获得你需要的东西。像regex101这样的工具可以成为测试你是否针对正确数据的一个简单方法。例如,你可能想从一个网页上的所有段落标签中获取你的数据。这个正则表达式可能看起来像这样。

/<p>(.*)</p>//

正则表达式的语法根据你所使用的编程语言而略有变化。大多数时候,如果你正在使用我们上面列出的一个库或类似的东西,你就不必担心生成正则表达式。

如果你对使用这些库中的一个不感兴趣,你可以考虑建立你自己的分析器。这可能具有挑战性,但如果你正在处理极其复杂的数据结构,可能值得付出努力。

构建你自己的分析器

当你需要完全控制你的数据是如何被解析的时候,建立你自己的工具可以是一个强大的选择。在建立你自己的分析器之前,有几件事需要考虑。

  • 自定义解析器可以用你喜欢的任何编程语言编写。你可以让它与你正在使用的其他工具兼容,如网络爬虫或网络刮刀,而不必担心整合问题。

  • 在某些情况下,建立你自己的工具可能具有成本效益。如果你已经有一个内部的开发团队,对他们来说,这可能不是一个太大的任务。

  • 你对一切都有细微的控制。如果你想针对特定的标签或关键词,你可以这么做。任何时候你的策略有了更新,你在更新数据解析器方面不会有很多问题。

尽管在另一方面,建立你自己的分析器也有一些挑战。

  • 页面的HTML是不断变化的。这可能成为你的开发人员的一个维护问题。除非你预见到你的解析工具对你的业务有巨大的重要性,否则从产品开发中抽出这些时间可能是无效的。

  • 构建和维护你自己的数据分析器的成本可能很高。如果你没有一个开发团队,承包工作是一个选择,但这可能会导致基于开发人员的小时费率的账单。此外,还有为新加入项目的开发人员提供培训的费用,因为他们要弄清楚事情的运作方式。

  • 你还需要购买、建立和维护一台服务器,以托管你的自定义分析器。它必须足够快,以处理你通过它发送的所有数据,否则你可能会遇到持续解析数据的问题。你还必须确保该服务器保持安全,因为你可能在解析敏感数据。

如果数据解析是你业务的一个重要部分,拥有这种控制水平是很好的,否则,它可能会增加不必要的复杂性。有很多理由想要一个定制的分析器,只是要确保它比使用现有的工具更值得投资。

解析schema.org元数据

还有另一种方法可以通过网站的模式来解析网络数据。网络模式标准由schema.org管理,这是一个在网络上推广结构化数据模式的社区。网络模式用于帮助搜索引擎理解网页上的信息并提供更好的结果。

人们想要解析模式元数据有很多实际原因。例如,公司可能想要解析电子商务产品的模式,以找到最新的价格或描述。记者可以解析某些网页,为他们的新闻文章获取信息。还有一些网站可能会聚集一些数据,如菜谱、操作指南和技术文章。

模式有不同的格式。你会听到JSON-LD、RDFa和Microdata模式。这些都是你可能要解析的格式。

JSON-LD是用于关联数据的JavaScript对象符号。这是由多维数组组成的。在SEO方面,它是使用schema.org标准实现的。JSON-LD通常更容易实现,因为你可以直接在HTML文档中粘贴标记。

RDFa(属性中的资源描述框架)是由万维网联盟(W3C)推荐的。它被用来在XML和HTML中嵌入RDF语句。这与其他模式类型之间的一个很大的区别是,RDFa只定义了语义标签的元语法。

Microdata是WHATWG的一个HTML规范,用于将元数据嵌套在网页的现有内容中。微数据标准允许开发者设计一个自定义的词汇表或使用其他的词汇表,如schema.org

所有这些模式类型都很容易用不同语言的一些工具进行解析。有一个来自ScrapingHub的库,另一个来自RDFLib


现有的数据解析工具

有许多的网页爬取工具,如ScrapingBee Google Search API,JSoup、Puppeteer、Cheerio或BeautifulSoup。

购买网络解析器的几个好处包括。

  • 使用一个现有的工具是低维护。
  • 你不必在开发和配置方面投入大量的时间。
  • 你可以获得专门为使用该特定工具和排除故障而培训的支持。

购买网络解析器的一些弊端包括。

  • 你不会对你的分析器处理数据的方式有任何细微的控制。尽管你会有一些选项可以选择。
  • 这可能是一个昂贵的前期费用。
  • 处理服务器问题将不是你需要担心的事情。

总    结

解析数据是处理从市场研究到为机器学习过程收集数据的一项常见任务。一旦你使用网络抓取和网页爬取的混合方式收集了你的数据,它很可能是一种非结构化的格式。这使得你很难从中获得有洞察力的意义。

使用解析器将帮助你把这些数据转化为你想要的任何格式,无论是JSON还是CSV或者任何数据存储。你可以建立你自己的分析器,将数据变形为高度指定的格式,或者你可以使用现有的工具来快速获得数据。选择对你的业务最有利的选项。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)