使用JSoup获取Google搜索结果

时间:2017-05-15 17:16:02

标签: java jsoup html-parsing

我正在尝试通过JSoup获取Google搜索结果列表。我目前使用的方法对于第一页(n)完全正常,但对于n + 1页,它不能很好地工作。以下是我如何获得第一页:

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

搜索字符串将包含第一页的https://www.google.com/search?q=apple内容。然后我的代码在n + 1页面上看起来像这样:

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"));
}

搜索n + 1页面看起来像:https://www.google.com/#q=apple&start=10。 我遇到的主要问题是n + 1次搜索中的doc.getElementsByClass("r")不包含任何元素。这意味着JSoup返回的类r不存在。我通过搜索doc.toString()来验证了这一点。有没有人有任何建议?

谢谢!

1 个答案:

答案 0 :(得分: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);
    }
}