java - 使用 JSoup 获取 Google 搜索结果

标签 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 。 我遇到的主要问题是 doc.getElementsByClass("r")在 n+1 次搜索中不包含任何元素。这意味着类 r JSoup 返回的内容中不存在。我通过搜索 doc.toString() 验证了这一点。有人有什么建议吗?

谢谢!

最佳答案

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

关于java - 使用 JSoup 获取 Google 搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43985304/

相关文章:

java - 如何在 Java 中使用 Vert.X 运行 CPU 密集型并行任务

python - 使用 BeautifulSoup 解析长 html 失败,输出已解析一半

html - Excel VBA打开google第一个搜索结果页

python-3.x - 如何在 beautifulsoup 的多个列表中获取特定元素?

Java Map - 整数值转换为字符串

java - Selenium moveToElement() 到 Selenide

java - 有没有一种有效的方法来测试元素是否与 Jsoup 中的选择器匹配?

java - 将相对路径转换为绝对路径在 JSoup 中不起作用

java - 从 JavaDoc 中提取所有方法的列表

安卓。获取 URL 时发生 HTTP 错误。状态=403