Phantomjs抓取渲染JS后的网页(Python代码)


Posted in Python onMay 13, 2016

最近需要爬取某网站,无奈页面都是JS渲染后生成的,普通的爬虫框架搞不定,于是想到用Phantomjs搭一个代理。

Python调用Phantomjs貌似没有现成的第三方库(如果有,请告知小编),漫步了一圈,发现只有pyspider提供了现成的方案。

简单试用了一下,感觉pyspider更像一个为新手打造的爬虫工具,好比一个老妈子,有时无微不至,有时喋喋不休。 轻巧的小工具应该更受人喜爱,我也怀着一点私心,可以带着我最爱的BeautifulSoup一块儿用,而不用再学PyQuery(pyspider用来解析HTML),更不用忍受浏览器写Python的糟糕体验(偷笑)。

所以花了一个下午的时间,把pyspider当中实现Phantomjs代理的部分拆了出来,独立成一个小的爬虫模块,希望大家会喜欢(感谢binux!)。

准备工作

你当然要有Phantomjs,废话!(Linux下最好用supervisord守护,必须保持抓取的时候Phantomjs一直处于开启状态)
用项目路径下的phantomjs_fetcher.js启动:phantomjs phantomjs_fetcher.js [port]
安装tornado依赖(使用了tornado的httpclient模块)

调用是超级简单的

from tornado_fetcher import Fetcher

# 创建一个爬虫
>>> fetcher=Fetcher(
  user_agent='phantomjs', # 模拟浏览器的User-Agent
  phantomjs_proxy='http://localhost:12306', # phantomjs的地址
  poolsize=10, # 最大的httpclient数量
  async=False # 同步还是异步
  )
# 开始连接Phantomjs的代码,可以渲染JS!
>>> fetcher.fetch(url)
# 渲染成功后执行额外的JS脚本(注意用function包起来!)
>>> fetcher.fetch(url, js_script='function(){setTimeout("window.scrollTo(0,100000)}", 1000)')

代码 https://github.com/2shou/PhantomjsFetcher

Python 相关文章推荐
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
python进阶教程之异常处理
Aug 30 Python
对于Python装饰器使用的一些建议
Jun 03 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
python实现C4.5决策树算法
Aug 29 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
python主要用于哪些方向
Jul 05 Python
详解Python yaml模块
Sep 23 Python
Python 中Operator模块的使用
Jan 30 Python
python实现批量提取指定文件夹下同类型文件
Apr 05 Python
Python Django项目和应用的创建详解
Nov 27 Python
python基于phantomjs实现导入图片
May 13 #Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 #Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 #Python
Python下载指定页面上图片的方法
May 12 #Python
Python基于二分查找实现求整数平方根的方法
May 12 #Python
python二分查找算法的递归实现方法
May 12 #Python
Python数据类型详解(四)字典:dict
May 12 #Python
You might like
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
我的论坛源代码(七)
2006/10/09 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
ES6中Array.includes()函数的用法
2017/09/20 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
校园文化建设方案
2014/02/03 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
企业催款函范本
2015/06/24 职场文书
生活委员竞选稿
2015/11/21 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server