用Scala进行Web Scraping

Mic*_*ley 34 scala libraries web-scraping

只是想知道是否有人知道利用Scala简洁语法的网络抓取库.到目前为止,我已经找到了Chafe,但这看起来很难记录和维护.我想知道是否有人在那里使用Scala进行刮擦并提出建议.(我正在尝试集成到现有的Scala框架中,而不是使用Python中编写的scraper.)

Ada*_*ent 12

首先,在JVM中有大量的HTML抓取lib,你需要做的就是pimp其中一个(pimp my library pattern).

我使用的四个是:

  • HtmlUnit - 将模拟浏览器甚至运行Javascript
  • 杰里科 - 如果您想编辑已删除的HTML,则保留格式并且非常理想
  • NekoHtml
  • JSoup - 不适用于Scala.可能会工作

我使用过Selenium但从未用过刮痧.Scala有一个硒包裹物.

我建议在一半的Scala lib上使用现有的Java库.

  • "半烤Scala"可以是"(over)烤java"的两倍. (2认同)

ove*_*ink 8

我没有Scala特定的建议,但对于JVM,我总体上取得了很好的成功:

  • JSoup你可以通过CSS选择器"刮"文档.真的很高兴与合作.
  • 使用Tagsoup将输入HTML转换为XML,然后使用XML处理器"Scrape".

由于Scala的内置XML"dsl"非常简洁(如果你可以原谅它的性能问题和偶尔的API怪异),那么Tagsoup路由实际上与Scala非常兼容.此外,Tagsoup将处理您提供的几乎任何垃圾文档.它还具有内置的许多HTML实体理解等细节,其他SAXParsers将会扼杀这些实体,因为它们未被宣布.

tl; dr - 尽可能使用JSoup + CSS选择器,否则使用Tagsoup + scala XML.如果慢可以,首先使用tagsoup,然后对结果进行jsoup.

  • 看起来JSoup的作者几年前修复了Scala问题:https://github.com/jhy/jsoup/pull/54 (3认同)