Phantomjs的正确打开方式

简介:

前段时间分析了Selenium+Phantomjs的使用方法以及性能优化问题,期间也分析了利用Selenium+phantomjs爬虫爬过的一些坑问题。然而在使用phantomjs的过程中,并没有正真提升phantomjs的性能,爬虫性能也没有很好的提升。经过网友的提醒,发现其实是使用phantomjs的方法出了问题,因此无论怎么优化,都不能从根本上去提升性能。那么本篇就来好好说说,Phantomjs正确的打开方式。

抛弃selenium+phantomjs

  之前我一直使用selenium去使用phantomjs,原因是因为selenium封装了phantomjs一部分功能,selenium又提供了python的接口模块,在python语言中可以很好地去使用selenium,间接地就可以使用phantomjs。然而,我现在要说的是,是时候抛弃selenium+phantomjs了,原因之一此封装的接口很久没有更新了(没人维护了),原因之二selenium只实现了一部分phantomjs功能,且很不完善。  
phantomjs APi

  通过查看phantomjs官方介绍,我们可以发现phantomjs的功能异常强大,绝不仅仅是selenium封装的功能那么简陋。phantomjs提供了很多种APi,具体可以查看:phantomjs api介绍,其中最常用的要属Phantomjs WebService与Phantomjs WebPage,前者用于开启http服务,后者用于发起http请求。
Phantomjs正确使用方式

正确打开方式应该使用phantomjs Webservice作为一种web服务的形式(api),将其与其他语言分离开来(比如python)。

设计流程

  Python通过http请求下发任务,Phantomjs Webservice获取任务后去处理,处理完以后再将结果返回给Python。任务调度、存储等复杂操作交给Python去做,Python可以写成异步并发去请求Phantomjs Webservice,需要注意的是目前一个Phantomjs Webservice只支持10个并发。但我们可以在一台服务器上多开几个phantomjs Webservice启用不同的端口即可,或者可以多台服务器做个集群,用nginx做反向代理。
Phantomjs Webservice

新建test.js,写入如下代码:

04bfe79160d01eb66b95aa9956e1885440f0d0ff

作用:处理http请求,获取url,进行截图或者获取源码操作。 
使用:

phantomjs.exe test.js

会在本地开启web服务,端口为8080。

Python Client

新建http_request.py,写入如下代码:

ff2ad0847c3337d9ccffdf7259714cde172adb20

作用:异步并发下发任务。

运行截图

运行python以后,异步下发10个任务,Phantomjs服务器端接收到url并开始处理,并发处理10个任务并输入结果。


原文发布时间为:2017-08-27

本文作者:nmask

本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号

相关文章
|
Java Spring
SpringAOP中Aspect优先级与切面表达式详解
SpringAOP中Aspect优先级与切面表达式详解
266 0
|
Web App开发
PC - Chrome浏览器占用太多内存,内存不够用怎么办?(一)
PC - Chrome浏览器占用太多内存,内存不够用怎么办?(一)
913 0
PC - Chrome浏览器占用太多内存,内存不够用怎么办?(一)
|
JavaScript API
phantomjs安装使用
phantomjs安装 phantomjs 是一款基于webkit的无界面浏览器,提供多种js api;可以方便的进行扩展: yum --skip-broken install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 wget https://bitbucket.org/ariya/phantomjs/d
2354 0
|
Oracle 关系型数据库 MySQL
数据库之-元数据 DatabaseMetaData 初学(二)
数据库之-元数据 DatabaseMetaData 初学(二)
199 0
|
网络协议 Docker 容器
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
357 0
|
JavaScript 前端开发 测试技术
PhantomJS
PhantomJS 是一个基于 WebKit 的无头浏览器,它可以在不显示浏览器界面的情况下执行网页自动化任务。PhantomJS 使用 JavaScript 作为编程语言,并提供了丰富的 API 来操作网页。它支持多种操作系统,如 Windows、macOS 和 Linux 等。
190 2
|
移动开发 小程序 安全
几步教您绑定阿里云账号
教您绑定阿里云账号
1441 0
几步教您绑定阿里云账号
|
网络协议 大数据 Go
gRPC(四)基础:gRPC流
Client发送完成后需要手动调用Close()或者CloseSend()方法关闭stream,Server端则return nil就会自动 Close。
1047 0
gRPC(四)基础:gRPC流
|
SQL 运维 关系型数据库
CloudDBA初体验:SQL优化建议
CloudDBA帮助阿里云客户自动优化SQL语句
14509 0
|
弹性计算 网络安全
阿里云服务器怎么换IP?分两种情况
阿里云服务器怎么换IP?分两种情况
496 1

热门文章

最新文章