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使用CMD模块更优雅的运行脚本
May 11 Python
简单上手Python中装饰器的使用
Jul 12 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
在Python中使用gRPC的方法示例
Aug 08 Python
基于python的ini配置文件操作工具类
Apr 24 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 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在线打包程序源码
2008/07/27 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
python开发前景如何
2020/06/11 Python
Python中return函数返回值实例用法
2020/11/19 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
应届生幼儿园求职信
2013/11/12 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
车间安全生产标语
2014/06/06 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
投资入股合作协议书
2014/10/28 职场文书
初中教师个人工作总结
2015/02/10 职场文书
法制教育观后感
2015/06/17 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
财务年终工作总结大全
2019/06/20 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python