2014-04-27 81 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