pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
来源:互联网 发布:美工字体怎么写好看 编辑:程序博客网 时间:2024/05/18 18:43
http://blog.binux.me/2015/01/pyspider-tutorial-level-3-render-with-phantomjs/
January 10 2015 ,英文原文:http://docs.pyspider.org/en/latest/tutorial/Render-with-PhantomJS/
在上两篇教程中,我们学习了怎么从 HTML 中提取信息,也学习了怎么处理一些请求复杂的页面。但是有一些页面,它实在太复杂了,无论是分析 API 请求的地址,还是渲染时进行了加密,让直接抓取请求非常麻烦。这时候就是PhantomJS 大显身手的时候了。
在使用 PhantomJS 之前,你需要安装它(安装文档)。当你安装了之后,在运行 all
模式的 pyspider 时就会自动启用了。当然,你也可以在 demo.pyspider.org 上尝试。
使用 PhantomJS
当 pyspider 连上 PhantomJS 代理后,你就能通过在 self.crawl
中添加 fetch_type='js'
的参数,开启使用 PhantomJS 抓取。例如,在教程二中,我们尝试抓取的 http://movie.douban.com/explore 就可以通过 PhantomJS 直接抓取:
``` python class Handler(BaseHandler): def on_start(self): self.crawl(‘http://movie.douban.com/explore’, fetch_type=’js’, callback=self.phantomjs_parser)
def phantomjs_parser(self, response): return [{ "title": "".join( s for s in x('p').contents() if isinstance(s, basestring) ).strip(), "rate": x('p strong').text(), "url": x.attr.href, } for x in response.doc('a.item').items()] ```
- 我在这里使用了一些 PyQuery 的 API,你可以在 PyQuery complete API 获得完整的 API 手册。
在页面上执行自定义脚本
你会发现,在上面我们使用 PhantomJS 抓取的豆瓣热门电影只有 20 条。当你点击『加载更多』时,能获得更多的热门电影。为了获得更多的电影,我们可以使用 self.crawl
的 js_script
参数,在页面上执行一段脚本,点击加载更多:
python def on_start(self): self.crawl('http://movie.douban.com/explore#more', fetch_type='js', js_script=""" function() { setTimeout("$('.more').click()", 1000); }""", callback=self.phantomjs_parser)
- 这个脚本默认在页面加载结束后执行,你可以通过
js_run_at
参数 修改这个行为- 由于是 AJAX 异步加载的,在页面加载完成时,第一页的电影可能还没有加载完,所以我们用
setTimeout
延迟 1 秒执行。- 你可以间隔一定时间,多次点击,这样可以加载更多页。
- 由于相同 URL (实际是相同 taskid) 的任务会被去重,所以这里为 URL 加了一个
#more
上面两个例子,都可以在 http://demo.pyspider.org/debug/tutorial_douban_explore 中找到。
- pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
- pyspider 爬虫教程(三)
- 一起学爬虫 Node.js 爬虫篇(三)使用 PhantomJS 爬取动态页面
- pyspider 爬虫教程(一)
- pyspider 爬虫教程(二)
- python+pyspider+phantomjs实现简易爬虫功能
- pyspider 爬虫教程
- pyspider 爬虫教程
- Pyspider爬虫教程
- 使用Selenium和PhantomJS解析带JS的网页
- 使用Selenium和PhantomJS解析带JS的网页
- php结合phantomjs实现网页截屏、抓取js渲染的页面
- 使用phantomjs抓取JS动态生成的页面
- 使用phantomjs抓取JS动态生成的页面
- 基本的python爬虫(pyspider)
- pyspider 爬虫教程(一):HTML 和 CSS 选择器
- pyspider 爬虫教程(一):HTML 和 CSS 选择器
- Windows下Python爬虫框架pyspider的安装与使用
- 远程推送,集成极光的SDK,证书制造
- 我写博客的原因
- 单指手势,旋转,缩放
- HDU——1874畅通工程续(邻接矩阵弗洛伊德)
- 运行时的简单应用,拓展+属性
- pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
- NOJ——1627Alex’s Game(II)(尺取)
- git分支管理
- NOJ——1645聊天止于呵呵(string流重定向+map,水题)
- 开发自己的cordova插件
- JSP应用导出Excel报表的简单实现以及中文乱码彻底解决(HTML)
- NOJ——1624死胡同(胡搞模拟)
- 网络图片加载的封装-(从零开始搭建android框架系列(4))
- NOJ——1568走走走走走啊走(超级入门DP)