抓取js生成html,使用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());

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://blog.csdn.net/lgcssx/article/details/47174565

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值