首页 > 解决方案 > 使用 Selenium 和 Java 从网站抓取数据

问题描述

我正在尝试从cricinfo网站上抓取数据,并编写了一个接受玩家姓名并显示其相应数据的方法。

如果您看到此方法获取玩家姓名并显示他的所有数据。

我的要求是显示所有球员的完整记分卡,而不是只显示一名球员的数据。

网址

https://www.espncricinfo.com/series/8039/scorecard/1144490/india-vs-south-africa-8th-match-icc-cricket-world-cup-2019

方法

public static void displayData(WebDriver driver, String input)
{
    WebElement player = driver.findElement(By.xpath("//a[contains(text(),'"+input+"')]"));
    String player_name = player.getText();
    
    WebElement bowled_by = driver.findElement(By.xpath("//a[contains(text(),'"+input+"')]//parent::div//following-sibling::div[@class='cell commentary']"));
    String bowled_by_detail = bowled_by.getText();
    
    List<WebElement> score_card = driver.findElements(By.xpath("//a[contains(text(),'"+input+"')]//parent::div//following-sibling::div[@class='cell runs']"));
    
    System.out.println(player_name);
    System.out.println(bowled_by_detail);
    
    for(int i=0;i<score_card.size();i++)
    {
        String values = score_card.get(i).getText();
        
        System.out.print(values + " | ");
    }System.out.println();
}

方法执行

显示数据(驱动程序,“HM Amla”);

结果

HM Amla c Sharma b Bumrah 6 | 9 | 16 | 1 | 0 | 66.66 |

标签: seleniumselenium-webdriver

解决方案


就像 python 中的 BeautifulSoup 一样,您可以使用Jsoup使用 java 进行网络抓取,它非常快,您可以根据需要使用 css 选择器检索数据。

我们需要使用具有数据的 selenium 遍历元素块,然后将 outerhtml 传递给 jsoup 以进一步抓取数据。


推荐阅读