WebMagic使用selenium抓取页面


在抓取一些动态加载内容的页面时,WebMagic无法抓取到动态渲染的内容,这时,就需要使用selenium等工具了。

我使用的是webmagic 0.7.3的版本,这个版本已有一个selenium的扩展可以用,处理一些简单的页面基本可以了。

  1. 项目中需要加入以下依赖
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-core</artifactId>
    <version>0.7.3</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.3</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-selenium</artifactId>
    <version>0.7.3</version>
</dependency>
  1. 其次,需要安装chrome, chromedriver, 注意需要使用对应版本的chromedriver。
  2. 加入配置文件config.ini,可以看出默认这个东东还支持PhantomJS,不过一般使用Chrome就行了
#driver=phantomjs
#driver=firefox
driver=chrome
#driver=http://localhost:8910
#driver=http://localhost:4444/wd/hub

# PhantomJS specific config (change according to your installation)
#phantomjs_exec_path=/Users/detro/bin/phantomjs-qt5
chrome_exec_path=C:\Users\rocky\AppData\Local\Google\Chrome\Application\chrome.exe
#phantomjs_exec_path=D:\\softwares\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe
#phantomjs_driver_path=../../src/main.js
phantomjs_driver_loglevel=DEBUG
  1. 在创建Spider的代码中加入downloader SeleniumDownloader
Spider.create(new Test()).addUrl("xxxxxx") 
                .setDownloader(new SeleniumDownloader()).thread(1).runAsync();
  1. 非常简单,以上就可以启动selenium操纵chrome抓取页面了

如果碰到一些需要进行页面处理的,比如,有时页面需要滚动,才能逐步加载完全部的页面, 那这个扩展的功能还欠缺,我们还需要进行一些自己的处理。

webmagic-selenium代码非常简单,只有两个类,我们可以直接把源码拿出来修改,加上自己需要的功能就行了。比如,修改SeleniumDownloader源码加入滚动页面的功能。

JavascriptExecutor js = (JavascriptExecutor)webDriver;
js.executeScript("scrollTo(0,10000)");
try {
    Thread.sleep(sleepTime);
} catch (InterruptedException e) {
    e.printStackTrace();
}
Show Comments