phantomjs 简介「建议收藏」

phantomjs 简介「建议收藏」在爬虫、自然语言处理群320349384中的交流中,偶然接触到phantomjs、casper等相对于httpclient较新的框架及采集解决方案,微查之后发现方案可行,故尽清明三日之力,将其二次开发应用于百度元搜索信息采集项目中,达到预期效果,下一步将重点应用到腾讯微博采集和抢票抢手机项目中。下面,将分步骤介绍一下。  一、phantomjs介绍   (1)一个基于web

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
 在爬虫、自然语言处理群320349384中的交流中,偶然接触到phantomjs、casper等相对于httpclient较新的框架及采集解决方案,微查之后发现方案可行,故尽清明三日之力,将其二次开发应用于百度元搜索信息采集项目中,达到预期效果,下一步将重点应用到腾讯微博采集和抢票抢手机项目中。下面,将分步骤介绍一下。

    一、phantomjs介绍

     (1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

     (2)提供javascript API接口,即通过编写js程序可以直接与webkit内核交互,在此之上可以结合java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。

     (3)提供windows、linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。

    二、phantomjs常用API介绍

      近几天的学习找了不少资料,也包括官网的,但其相关学习资料还是相对较少的,很多问题都是进行N多测试才搞清楚,在此耗费了不少时间。在学习时,结合官网和本篇博文效果会更好。

     (1)常用内置几大对象

var system=require('system');     //获得系统操作对象,包括命令行参数、phantomjs系统设置等信息
var page = require('webpage');   //获取操作dom或web网页的对象,通过它可以打开网页、接收网页内容、request、response参数,其为最核心对象。
var fs = require('fs');   //获取文件系统对象,通过它可以操作操作系统的文件操作,包括read、write、move、copy、delete等。

      (2) 常用API

page.open(url,function(status) {} //通过page对象打开url链接,并可以回调其声明的回调函数,其回调发生的时机为该URL被彻底打开完毕,即该URL所引发的请求项被全部加载完,但ajax请求是与它的加载完成与否没有关系

page.onLoadStarted = function() {}//当page.open调用时,回首先执行该函数,在此可以预置一些参数或函数,用于后边的回调函数中
page.onResourceError = function(resourceError) {} //page的所要加载的资源在加载过程中,出现了各种失败,则在此回调处理
page.onResourceRequested = function(requestData, networkRequest) {} //page的所要加载的资源在发起请求时,都可以回调该函数
page.onResourceReceived = function(response) {} //page的所要加载的资源在加载过程中,每加载一个相关资源,都会在此先做出响应,它相当于http头部分,  其核心回调对象为response,可以在此获取本次请求的cookies、userAgent等
page.onConsoleMessage = function (msg) {}//欲在执行web网页时,打印一些输出信息到控制台,则可以在此回调显示。
page.onAlert = function(msg) {} //phantomjs是没有界面的,所以对alert也是无法直接弹出的,故phantomjs以该函数回调在page在执行过程中的alert事件
page.onError = function(msg, trace) {} //当page.open中的url,它自己(不包括所引起的其它的加载资源)出现了异常,如404、no route to web site等,都会在此回调显示。
page.onUrlChanged = function(targetUrl) {} // 当page.open打开的url或是该url在打开过程中基于该URL进行了跳转,则可在此函数中回调。
page.onLoadFinished = function(status){}  // 当page.open的目标URL被真正打开后,会在调用open的回调函数前调用该函数,在此可以进行内部的翻页等操作
page.evaluate(function(){});// 在所加载的web page内部执行该函数,像翻页、点击、滑动等,均可在此中执行
page.render("");//将当前page的现状渲染成图片,输出到指定的文件中去。

     (3)注意事项

           1、区分phantomjs的对象和打开的web page的对象,如document、window等,两者都有,在调用page.evaluate和不调用的时候,注意区分二者的范围,容易在调试时出现很多的问题,且不好发现。    

           2、page.injectJs和page.includeJs的区别,前者侧重本地的js文件,与libraryPath挂购,后者侧重网络js文件,尤其在引入jquery等第三方库时,会经常遇到。

           3、编码问题,两个重要参数,–output-encoding,–script-encoding,前者为输出编码,后者为所使用js、参数配置文件的编码,为方便起鉴,建议均采用utf-8编码,并注所应用到的目标文件的编码,以免引起很不可思议的异常,又无从查起。

   

     三、百度元搜索采集器

         主要是java se+js+phantomjs的应用,

      (1) 编写好js脚文程序,预留出所有可配置参数,并提供json文件传输相关参数。

      (2)  通过java程序,定义相关参数并生成对应的json文件。

      (3) 通过java命令行调用API,调用phantomjs命令,并传入js、配置文件路径,从而开启爬虫。

       (4)  首先采集关键词的搜索页的链接集合,最后统一去遍历采集具体的对象网页。


    四、应用小结

        经过上述的项目实测应用,它将非常方便的应用于模拟登陆,如微博、电商类,或是小米、火车票抢票等项目中,下一步计划将其与上述项目结合,开发更有意思的项目。    

    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159341.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 社会治理大数据平台怎么建_平度市社会治理大数据平台建设有序推进

    社会治理大数据平台怎么建_平度市社会治理大数据平台建设有序推进6月1日,市委常委、政法委书记陈勇调度了全市社会治理大数据平台建设进展情况。陈勇首先实地查看了市级社会治理指挥中心建设情况,详细询问了施工人员工程进展、需要协调解决的问题和困难。下午,陈勇听取了青岛城市大数据运营有限公司关于社会治理大数据平台建设推进情况汇报,指出要按照“全省最优、全国一流”的目标,加快智慧城市创新软件版块的开发和基础数据的导入,同步做好信息安全保障工作,强化实战应用,确保7月1日…

  • 七、观察者模式——关注我,分享旅途最浪漫的瞬间! #和设计模式一起旅行#

    最浪漫的事就是在路上,身边有你陪伴!故事背景在路上,和设计模式MM,做过飞机,也骑过单车,从大中国到了东京,东京真的很热(知道那啥啥为什么叫东京热了吧)。这一路不断的分享我们走过的路和看过的风景,旅行就是如此的美好,看别人看的厌烦过的风景,走别人走了无数遍的路!只有自己走过了,才算是经历!(就如我的这一场设计模式的学习总计之路,不管有多少人分享过,我依然要自己在过一遍,其中的意…

  • SQL2008数据库安装教程_sql server安装完找不到

    SQL2008数据库安装教程_sql server安装完找不到很多初学者在开始安装AdventureWorks2008时,虽然成功安装了,但是却发现其他的数据库都有,就偏偏没有AdventureWorks2008,就如下图所示: 最近很多人问这个问题的解决办法,所以还是有必要写这篇文章的。其实解决的办法很简单:依次【开始菜单】à【MicrosoftSQLServer200n】à【配置工具】à【SQLServer配置管理器】,打开如下图所示: 然后选择【SQLSERVER(MSSQLSERVER)】,右键选择属性,如下图所示,勾选前

  • MyEclipse6.5下struts2+spring2+hibernate3 整合

    MyEclipse6.5下struts2+spring2+hibernate3 整合

  • idea配置远程debug_idea远程调试

    idea配置远程debug_idea远程调试在工作中经常会遇到本地运行没有问题,部署到环境上就会出现问题,很多时候也没有错误日志,所以可以使用远程debug的方式,像本地debug一样,debug服务器上部署的项目。一、idea设置1.在idea工具栏,EditConfigurations2.添加remote3.部署远程服务1:将项目打成jar包上传到服务器上,然后使用命令启动。复制上面生成的一段参数:-agentlib:jdwp=transport=dt_socket,server=y,…

  • 使用netty4.x 编写TCP服务器关于握手问题

    使用netty4.x 编写TCP服务器关于握手问题

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号