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 strip()函数 介绍
May 24 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
python显示生日是星期几的方法
May 27 Python
python遍历目录的方法小结
Apr 28 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
python中模块的__all__属性详解
Oct 26 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
python实现批量文件重命名
Oct 31 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
python中的 zip函数详解及用法举例
Feb 16 Python
python爬虫中抓取指数的实例讲解
Dec 01 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结合web uploader插件实现分片上传文件
2016/05/10 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
JavaScript手机振动API
2016/06/11 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
python计算方程式根的方法
2015/05/07 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python3 replace()函数使用方法
2018/03/19 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
任意存:BOXFUL
2018/05/21 全球购物
企业统计员岗位职责
2013/12/13 职场文书
医学生个人求职信范文
2014/02/07 职场文书
南京青奥会口号
2014/06/12 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
python数字图像处理:图像简单滤波
2022/06/28 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript