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 24 Python
Python实现数通设备端口使用情况监控实例
Jul 15 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
Python算法应用实战之队列详解
Feb 04 Python
Python上下文管理器和with块详解
Sep 09 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Python字符串格式化f-string多种功能实现
May 07 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
Python pandas如何向excel添加数据
May 22 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 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采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
js单词形式的运算符
2014/05/06 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
python re的findall和finditer的区别详解
2020/11/15 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
白酒市场开发计划书
2014/01/09 职场文书
开业庆典主持词
2014/03/21 职场文书
班主任班级寄语大全
2014/04/04 职场文书
党员活动日总结
2014/05/05 职场文书
群教班子对照检查材料
2014/08/26 职场文书
交通事故调解协议书
2015/05/20 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
数学复习课教学反思
2016/02/18 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
SQL Server 中的事务介绍
2022/05/20 SQL Server