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进阶教程之模块(module)介绍
Aug 30 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
Python模块汇总(常用第三方库)
Oct 07 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python next()和iter()函数原理解析
Feb 07 Python
Python实现抖音热搜定时爬取功能
Mar 16 Python
python playwrigh框架入门安装使用
Jul 23 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
服装厂厂长职责
2013/12/16 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python