我被分配了一个任务,可以抓住" 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函数,但我得到的输出并不像预期的那样。
答案 0 :(得分:1)
如果您使用的是单台计算机,那么Queue
适合您。
当您遇到需要抓取的网页中的链接时,请将其添加到Queue
。如果你想成为单线程,你可以写一个从这个队列中读取的while循环。最初,队列中可能包含NY Times链接。拉取并抓取该URL后,将有更多URL进入队列进行处理。您可以继续阅读纽约时报的所有文章。
使用Queue
还可以轻松实现多线程,允许多个线程从队列中获取,从而有助于提高吞吐量。看看生产者/消费者模式。
如果单个机器不够用,你将不得不做更多分布式的事情,比如使用Hadoop。雅虎使用Hadoop让多台机器同时支持网络。