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写的贪吃蛇游戏例子
Jun 16 Python
跟老齐学Python之list和str比较
Sep 20 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
Python使用matplotlib绘制动画的方法
May 20 Python
一篇文章快速了解Python的GIL
Jan 12 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
Python实现12306火车票抢票系统
Jul 04 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
Python实现微信机器人的方法
Sep 06 Python
Python 实现敏感目录扫描的示例代码
May 21 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.MVC的模板标签系统(三)
2006/09/05 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
Python入门篇之文件
2014/10/20 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python实现二维数组输出为图片
2018/04/03 Python
Atom的python插件和常用插件说明
2018/07/08 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python脚本开机自启的实现方法
2019/06/28 Python
python dumps和loads区别详解
2020/02/04 Python
python绘制高斯曲线
2021/02/19 Python
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
什么是Rollback Segment
2013/04/22 面试题
大四自我鉴定范文
2013/10/06 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
技能比赛获奖感言
2014/02/14 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript