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 相关文章推荐
Python3.2中的字符串函数学习总结
Apr 23 Python
浅析Python中的join()方法的使用
May 19 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python数组定义方法
Apr 13 Python
python enumerate函数的使用方法总结
Nov 15 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
Python实现中英文全文搜索的示例
Dec 04 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
PHP高级OOP技术演示
2009/08/27 PHP
php遍历目录viewDir函数
2009/12/15 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
js表格分页实现代码
2009/09/18 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
Angular工具方法学习
2016/12/26 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Django入门使用示例
2017/12/12 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
django使用LDAP验证的方法示例
2018/12/10 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
String和StringBuffer的区别
2015/08/13 面试题
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
北大自主招生自荐信
2013/10/19 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
2016年国培研修日志
2015/11/13 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
靠谱的活动总结
2019/04/16 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
python_tkinter弹出对话框创建
2022/03/20 Python