Java Web Crawler库

我想为实验制作一个基于Java的网络爬虫。 我听说如果这是你第一次使用Java制作一个Web爬虫是可行的方法。 但是,我有两个重要问题。

  1. 我的程序如何“访问”或“连接”到网页? 请简要说明一下。 (我理解从硬件到软件的抽象层的基础知识,这里我对Java抽象感兴趣)

  2. 我应该使用哪些库? 我想我需要一个用于连接网页的库,一个用于HTTP / HTTPS协议的库,以及一个用于HTML解析的库。

这是您的程序“访问”或“连接”到网页的方式。

URL url; InputStream is = null; DataInputStream dis; String line; try { url = new URL("http://stackoverflow.com/"); is = url.openStream(); // throws an IOException dis = new DataInputStream(new BufferedInputStream(is)); while ((line = dis.readLine()) != null) { System.out.println(line); } } catch (MalformedURLException mue) { mue.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } finally { try { is.close(); } catch (IOException ioe) { // nothing to see here } } 

这将下载html页面的源代码。

对于HTML解析,请参阅此内容

另外看看jSpider和jsoup

Crawler4j是最适合您的解决方案,

Crawler4j是一个开源Java爬虫,它为爬网提供了一个简单的界面。 您可以在5分钟内设置multithreadingWeb爬虫!

还访问。 更多基于Java的网络爬虫工具和每个工具的简要说明。

对于解析内容,我正在使用Apache Tika 。

现在有一个包含许多基于Java的HTML解析器,支持访问和解析HTML页面。

  • Jsoup
  • Jaunt API
  • HtmlCleaner
  • JTidy
  • NekoHTML
  • TagSoup

这是基本比较的HTML解析器的完整列表。

我建议你使用HttpClient库 。 你可以在这里找到例子。

我更喜欢crawler4j。 Crawler4j是一个开源Java爬虫,它为爬网提供了一个简单的界面。 您可以在几个小时内设置multithreadingWeb爬网程序。

你可以探索.apache droid或apache nutch来获得基于java的爬虫的感觉

虽然主要用于unit testingWeb应用程序,但HttpUnit遍历网站,单击链接,分析表格和表单元素,并为您提供有关所有页面的元数据。 我用它来进行Web爬行,而不仅仅是unit testing。 – http://httpunit.sourceforge.net/

我认为jsoup比其他人更好,jsoup运行Java 1.5及更高版本,Scala,Android,OSGi和Google App Engine。

以下是可用爬虫的列表:

https://java-source.net/open-source/crawlers

但我建议使用Apache Nutch

如果您想了解如何完成这些项目,请查看这些现有项目:

  • Apache Nutch
  • crawler4j
  • gecco
  • Norconex HTTP收集器
  • vidageek爬虫
  • webmagic
  • Webmuncher

典型的爬虫过程是一个循环,包括提取,解析,链接提取和输出处理(存储,索引)。 虽然魔鬼在细节中,即如何“礼貌”并尊重robots.txt ,元标记,重定向,速率限制,URL规范化,无限深度,重试,重访等。

Norconex HTTP收集器流程图

流程图由Norconex HTTP Collector提供 。