2016-09-24 67 views
-1

我們目前正在從事一個有jsoup概念的項目。我們無法檢索使用Yahoo和Bing搜索的搜索關鍵字的鏈接,這可能會在Google搜索引擎中實現。我們正在使用servlet和html。你能找到解決方案嗎?檢索使用雅虎和Bing搜索的鏈接

public static final String GOOGLE_SEARCH_URL = "https://www.google.com/search"; 
String searchURL = GOOGLE_SEARCH_URL + "?q="+word+"&num="+num; 
Document doc = Jsoup.connect(searchURL).userAgent("Mozilla/5.0").get(); 
Elements result = doc.select("h3.r a"); 
for (Element res : result) { 
    String linkHref = res.attr("href"); 
    linkHref = linkHref.substring(7, linkHref.indexOf("&")); 
    out.println("<a href="+linkHref+">"+linkHref+"</a>"); 

上述程序正在檢索使用谷歌搜索時的鏈接。但是,當我們將url更改爲Bing和Yahoo時,它不會檢索鏈接。

+0

然後檢查Yahoo和Bing的HTML源代碼,看看它爲什麼不起作用。有可能他們使用的代碼會隱藏JSoup等簡單分析器的鏈接。 –

回答

2

1)你試圖達到結果的方式是錯誤的。 重要提示:所有這三個搜索引擎都有不同的顯示結果的方式。

2)您應該檢查並找出在通過瀏覽器觸發任何搜索查詢後顯示的HTML。使用瀏覽器控制檯檢查元素。

每當我們在這三個搜索引擎,我們得到不同形式的結果搜索任何東西:

在冰

<li class="b_algo" data-bm="8"> 
 
    <h2><a href="https://en.wikipedia.org/wiki/Keanu_Reeves" h="ID=SERP,5133.1"><strong>Keanu Reeves</strong> - <strong>Wikipedia</strong>, the free encyclopedia</a></h2> 
 
    <div class="b_caption"> 
 
    <div class="b_attribution"><cite>https://<strong>en.wikipedia.org</strong>/wiki/<strong>Keanu_Reeves</strong></cite> 
 
    </div> 
 
    <p><strong>Keanu</strong> Charles <strong>Reeves</strong> (/ k eɪ ˈ ɑː n uː/kay-AH-noo [citation needed]; born September 2, 1964) is a Canadian actor, producer, director and musician.</p> 
 
    </div> 
 
</li>

在雅虎

<div class="compTitle options-toggle"> 
 
    <h3 class="title"><a class=" td-u" data-sb="/beacon/clk;_ylt=A2oKmK.cOOlXskYAmKe7HAx.;_ylu=X3oDMTBycWJpM21vBGNvbG8Dc2czBHBvcwMxBHZ0aWQDBHNlYwNzcg--" href="https://en.wikipedia.org/wiki/Keanu_Reeves" referrerpolicy="origin" target="_blank" data-cff="57e9389d37daf"><b>Keanu</b> Reeves - Wikipedia, the free encyclopedia</a></h3> 
 
    <div><span class=" fz-ms fw-m fc-12th wr-bw">en.wikipedia.org/wiki/<b><b>Keanu</b></b>_Reeves</span> 
 
    </div> 
 
</div>

在谷歌

<h3 class="r"><a href="https://en.wikipedia.org/wiki/Keanu_Reeves" onmousedown="return rwt(this,'','','','1','AFQjCNHeNQLRv6isQkhVWpt6-1ftD0Q0vw','EZmLIYbQoBakBQ8oWWstdQ','0ahUKEwjz_KKbp63PAhVKrY8KHVnuBPUQFggcMAA','','',event)">Keanu Reeves - Wikipedia, the free encyclopedia</a></h3>

所以這是不可能的你PROGRAMM Elements result = doc.select("h3.r a");到findout結果對所有的搜索引擎。

3)限制搜索結果的方式也不正確。你必須爲每個人使用不同的URL query

谷歌:use num=1 - https://www.google.com/search?q=test&num=1
兵:use count=1 - http://www.bing.com/search?q=test&count=1
雅虎:use n=1 - https://search.yahoo.com/search?p=test&n=1

當使用BingSearchURL你可以這樣做如下:

public static final String BING_SEARCH_URL = "https://www.bing.com/search"; 

String searchURL = BING_SEARCH_URL + "?q=" + word + "&count=" + num; 
    Document doc = Jsoup.connect(searchURL).userAgent("Mozilla/5.0").get(); 
    Elements result = doc.select("li.b_algo h2 a"); 
    for (Element res : result) { 
     String linkHref = res.attr("href"); 
     //linkHref = linkHref.substring(7, linkHref.indexOf("&")); //No need of doing substring 
     System.out.println("<a href=" + linkHref + ">" + linkHref + "</a>"); 
    }