使用Scrapy + Selenium抓取网页

某些页面是使用ajax技术渲染的,无法通过直接下载HTML源代码来解析,所以需要调用Selenium等软件帮助我们获取渲染后的HTML代码。

所需的软件包括:
1. Scrapy (http://scrapy.org/),python下的无敌抓取框架;
2. Selenium Server (http://seleniumhq.org/projects/remote-control/),可以用各种语言远程控制Selenium做各种事情,一般用于构建自动化测试工具,这里我们用来抓取网页;下面是原理图:
Selenium RC
3. 在电脑的Firefox中安装Selenium IDE插件。

下面我们开始一步步来做:
1. 首先,进入你的电脑上Selenium Server的jar包所在的目录,通过java -jar xxx.jar的方式运行它,程序会自动监听本地的4444端口;
2. 参考我的上一篇博文《如何连入一台没有外网IP的服务器》 ,将本地的4444端口与服务器的4444端口建立Remote映射;
3. 使用Scrapy框架开始编写python程序,具体的例子不再赘述,网上有许多例子,比如这个:https://gist.github.com/1045108。仅描述几个要点:
a) 在python里调用selenium这样写:
self.sel = selenium("localhost", 4444, "*firefox","http://example.com/")
不过直接写 “*firefox” 可能会找不到Firefox的路径,这时可以强制指定Firefox的程序路径,比如:”*firefox D:/Program Files/Mozilla Firefox/firefox.exe”。
b) 获取Firefox渲染完成后的HTML代码:

sel = self.selenium
sel.open(response.url)
sel.wait_for_page_to_load(10000)
html = sel.get_eval("selenium.browserbot.getCurrentWindow().document.getElementsByTagName('html')[0].innerHTML")

 

Done!

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s