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和Linux系统上的错误
Dec 12 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
python 2.7.14安装图文教程
Apr 08 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
Python实现快速计算词频功能示例
Jun 25 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
浅谈django的render函数的参数问题
Oct 16 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 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
session在PHP大型web应用中的使用
2011/06/25 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
python 快速排序代码
2009/11/23 Python
Python采集腾讯新闻实例
2014/07/10 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
Python列表对象实现原理详解
2019/07/01 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
部门经理迟到检讨书
2015/02/16 职场文书
加入学生会自荐书
2015/03/05 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
开除员工通知
2015/04/22 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
学术会议领导致辞
2015/07/29 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android