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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
玩转python爬虫之URLError异常处理
Feb 17 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python反射用法实例简析
Dec 22 Python
详解flask表单提交的两种方式
Jul 21 Python
pytorch打印网络结构的实例
Aug 19 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
Python如何生成xml文件
Jun 04 Python
python中numpy数组与list相互转换实例方法
Jan 29 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获取网页上所有链接的方法
2015/04/03 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
用js重建星际争霸
2006/12/22 Javascript
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
python实现计算倒数的方法
2015/07/11 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python中count函数简单的实例讲解
2020/02/06 Python
python可视化text()函数使用详解
2020/02/11 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
简述安装Slackware Linux系统的过程
2012/01/12 面试题
普师专业个人自荐信范文
2013/11/26 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
护理专业自我鉴定
2014/01/30 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
民主评议党员工作总结
2014/10/20 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android