2017-05-15 2 views
2

J'essaie d'obtenir une liste des résultats de recherche Google via JSoup. La méthode que j'utilise actuellement fonctionne parfaitement pour la première page (n), mais pour n + 1 pages ça ne marche pas très bien. Voici comment je reçois la première page:Obtenir les résultats de recherche Google avec JSoup

doc = Jsoup.connect(search).userAgent("Chrome").get(); 
links = doc.getElementsByClass("r"); 

La chaîne de recherche contiendrait quelque chose comme: https://www.google.com/search?q=apple pour la première page. Ensuite, mon code ressemble à ceci pour n + 1 pages:

for(int i = 1; i <= pages; i++){ 
    search = "https://www.google.com/#q=" + keyword + "&start=" + (i*10); 
    doc = Jsoup.connect(search).userAgent("Mozilla").get(); 
    links.addAll(doc.getElementsByClass("r")); 
} 

La recherche n + 1 pages ressemblerait à quelque chose comme: https://www.google.com/#q=apple&start=10. Le problème principal que j'ai est que doc.getElementsByClass("r") dans les recherches n + 1 ne contient aucun élément. Cela signifie que la classe r n'existe pas dans les retours de JSoup. J'ai vérifié cela en cherchant par doc.toString(). Est-ce que quelqu'un a des suggestions?

Merci!

+1

Je vous suggère de ne pas analyser les résultats de la recherche, mais plutôt utiliser une API. – Kayaman

+0

@Kayaman lequel? –

+0

@Kayaman Aussi, pour les besoins de mes recherches je voudrais ne pas utiliser une API. Des suggestions sur comment simplement analyser le HTML? – Tommy

Répondre

0
public class googleResults { 

    public static void main(String[] args) { 
     System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe"); 
     WebDriver driver = new FirefoxDriver(); 
     driver.manage().window().maximize(); 
     driver.get("https://www.google.com/"); 
     driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 
     driver.findElement(By.id("lst-ib")).sendKeys("search" + Keys.ENTER); 
     driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 
     printResults(driver); 
    } 

    public static void printResults(WebDriver driver) { 
     List<WebElement> searchResults = driver.findElements(By.className("r")); 
     for (WebElement searchResult : searchResults) { 
      System.out.println(searchResult.getText()); 
     } 
     driver.findElement(By.id("pnnext")).click(); 
     /*Limit number of calls*/ 
     driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 
     printResults(driver); 
    } 
}