我正在尝试通过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()
验证了这一点。有没有人有什么建议?谢谢!
最佳答案
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);
}
}