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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python装饰器深入学习
Apr 06 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
在Python中调用Ping命令,批量IP的方法
Jan 26 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
Python基于smtplib协议实现发送邮件
Jun 03 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 Python
如何利用Python实现一个论文降重工具
Jul 09 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
vue 组件基础知识总结
2021/01/26 Vue.js
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
JPA的优势都有哪些
2013/07/04 面试题
人事主管岗位职责
2014/01/30 职场文书
财务情况说明书范文
2014/05/06 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
公务员处分决定书
2015/06/25 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL