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异步任务队列示例
Apr 01 Python
pycharm安装图文教程
May 02 Python
运行django项目指定IP和端口的方法
May 14 Python
Python类的继承用法示例
Jan 31 Python
python导入坐标点的具体操作
May 10 Python
python用for循环求和的方法总结
Jul 08 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
Python递归实现打印多重列表代码
Feb 27 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
简单了解Python多态与属性运行原理
Jun 15 Python
python学习笔记之多进程
Aug 06 Python
用pip给python安装matplotlib库的详细教程
Feb 24 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
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
laravel自定义分页效果
2017/07/23 PHP
thinkphp分页集成实例
2017/07/24 PHP
强制设为首页代码
2006/06/19 Javascript
JQuery 入门实例1
2009/06/25 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python模块restful使用方法实例
2013/12/10 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python def 定义函数,调用函数方式
2020/06/02 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
业务内勤岗位职责
2014/04/30 职场文书
校庆标语集锦
2014/06/25 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技