使用selenium抓取JS动态生成的页面

在抓取网页数据时,传统jsoup方案只能对静态页面有效,而有些网页数据往往是js生成的,所以这时候需要其它的方案。
首先的思路是分析js程序,对js的请求进行再次抓取,这适合于特定的页面抓取,要做到对不同目标URL的通用性,比较麻烦。
第二种思路,也是比较成熟的做法是利用第三方的驱动渲染页面,然后下载。这里介绍一下第二种实现思路。

Selenium一个模拟浏览器的自动化测试工具,它提供一组API可以与真实的浏览器内核交互。

Java环境下的maven配置如下:


   org.seleniumhq.selenium
   selenium-java
   2.46.0
  

第三方驱动主要有IEDriver,FirefoxDriver,ChromeDriver,HtmlUnitDriver。
htmlUnit也是一 种自动化测试的工具。可以用 HtmlUnit模拟浏览器运行,获得执行后的html页面。其中HtmlUnitDriver是对htmlUnit的封装。
因为htmlunit对js解析的支持有限,在实际工程中并不常用。
以chrome为例下载对应的驱 http://code.google.com/p/chromedriver/downloads/list  。
下载driver时需要注意与 selenium的版本兼容,可能出现异常情况,一般下载最新版本就好。
程序运行前一定要制定驱动位置,比如在Windows下面
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");

获取整个页面

 public static void testChromeDriver() {
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://picture.youth.cn/qtdb/201506/t20150625_6789707.htm");
String responseBody = webDriver.getPageSource();
System.out.println(responseBody);
webDriver.close();
}
获取新浪评论数

public static void waitForSomthing(){
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://news.sina.com.cn/c/2015-07-04/023532071740.shtml");
        WebDriverWait wait = new WebDriverWait(driver,10);  
        wait.until(new ExpectedCondition() {
            public Boolean apply(WebDriver webDriver) {
                System.out.println("Searching ...");
                return webDriver.findElement(By.id("commentCount1")).getText().length() != 0;
            }
        });
          
        WebElement element = driver.findElement(By.id("commentCount1"));  
        System.out.println("element="+element.getText());
}

关于selenium的更多api及介绍: http://docs.seleniumhq.org/docs/
参考: http://my.oschina.net/flashsword/blog/147334
一些driver的测试报告: http://my.oschina.net/xxjbs001/blog/396564


你可能感兴趣的:(web,spider)