2014-04-27 84 views
1

我想抓取雅虎,并获得前10名匹配关键字的结果。搜索雅虎答案使用Jsoup

我使用this链接抓取的结果我使用这个

代码是:

public static void main(String args[]) throws IOException 
{ 
    try 
    { 
     Document doc = Jsoup.connect("https://in.search.yahoo.com/search;_ylt=AibrWnqoneznrEAiS9bG0aOuitIF?p=solar+systems&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-405").get(); 
      for(Element dc : doc.select("div#doc.uh3-p uh3lite")) 
     { 
      System.out.println("data"); 
        for(Element dd : doc.select("div#bd")) 
      { 
       for(Element results : doc.select("div#results")) 
       { 
        for(Element wb : doc.select("div#web")) 
        { 
         Elements data=wb.select("span"); 
         if(data.size()>0) 
         { 
           System.out.println(data.get(0).text()); 
         } 
        } 
       } 
      } 
     } 
    } 
    catch(Exception ex) 
    { 
     System.out.println(ex); 
    } 
} 

我得到它没有结果。谁能帮我?

+0

您是否阅读过该网站的robots.txt文件?我很确定它不允许网络爬行。 –

+0

@JechtTyre雅虎允许我们抓取其搜索到的链接..我能够抓取数据.. –

+0

只是因为你能够不意味着它被允许。检查这个链接:[http://search.yahoo.com/robots.txt](http://search.yahoo.com/robots.txt)。你应该能够看到通用的“禁止:/搜索” –

回答

1

此选择器是错误的。

doc.select("div#doc.uh3-p uh3lite") 

如果您想选择两个班,使用每个类名之前的时期.

doc.select("div#doc.uh3-p.uh3lite") 

选择器中的空间意味着完全不同的东西。

编辑:此外,您可以参考每个嵌套for循环选择器中的doc。我假定你的意思是指前一个for循环中的选定元素。

for(Element dc : doc.select("div#doc.uh3-p uh3lite")) 
    { 
     System.out.println("data"); 

     for(Element dd : dc.select("div#bd")) // note doc was changed to dc 
     { 
      for(Element results : dd.select("div#results")) // note doc was changed to dd 
      { 
       // etc... 

最后,如果你得到任何结果,因为您的打印语句注释掉怎么会知道?

+0

谢谢你的建议,但我仍然没有结果 –

+0

我能够使用其余的选择器就好了。您应该在原始帖子中更新您的代码。请考虑我编辑到您的文章中的代码格式技术并将其应用到您的原始代码中。 – Daniel

+0

@Gaurav请参阅我的编辑。 – Daniel