使用Jsoup的Web爬虫(NYTimes)(链接中的链接)

时间:2014-04-03 17:38:54

标签: java jsoup web-crawler

我被分配了一个任务,可以抓住" nytimes"网站并使用网络爬虫的概念在该网站上显示最喜欢,共享等文章。     我已经利用JSOUP从nytimes的主页中提取所有链接。代码如下:

public static void processPage(String URL) throws IOException
            {

             Document doc = Jsoup.connect(URL).get();
             Elements questions = doc.select("a[href]");
             for(Element link: questions)
             {
                String absUrl1 = link.absUrl("href");
                if(absUrl1.contains("nytimes.com")) {          
                System.out.println(absUrl1); }
              }
             }

此代码用于提取和显示包含" nytimes.com"的所有链接。但是如何解析所有这些链接并提取该链接中的链接等等?这就是爬虫应该做的事情。但我无法弄明白。我试图以递归方式调用processPage函数,但我得到的输出并不像预期的那样。

1 个答案:

答案 0 :(得分:1)

如果您使用的是单台计算机,那么Queue适合您。

当您遇到需要抓取的网页中的链接时,请将其添加到Queue。如果你想成为单线程,你可以写一个从这个队列中读取的while循环。最初,队列中可能包含NY Times链接。拉取并抓取该URL后,将有更多URL进入队列进行处理。您可以继续阅读纽约时报的所有文章。

使用Queue还可以轻松实现多线程,允许多个线程从队列中获取,从而有助于提高吞吐量。看看生产者/消费者模式。

如果单个机器不够用,你将不得不做更多分布式的事情,比如使用Hadoop。雅虎使用Hadoop让多台机器同时支持网络。