接触过爬虫的人都知道,有很多html是js渲染后才有数据给予解析的,php执行JavaScript可以有V8 javascript engine,要想获取渲染后的html也可以直接使用

php的扩展  querylist 采集,文档:

https://www.querylist.cc/docs/guide/v4/PhantomJS

不过这里想聊聊phantomjs的api接口文档,以前只会命令行模式的phantomjs指令 + php的exec函数执行JavaScript代码

phantomjs的api:

http://phantomjs.org/api/

接口功能:提供一个接口地址,传入网址返回渲染后的html(字符串)

使用webserver模式:phantomjs可执行文件执行js文件,就会监听端口,当有请求进来之后就会返回渲染后的html

var webserver = require('webserver');
var server = webserver.create();var pageInfo = {};var action = {'openUrl':true,'parseJs':true};var service = server.listen(8888, function(request, response) {post = request.post;var opera = (typeof post.action != 'undefined' && typeof action[post.action] != 'undefined') ? post.action : 'openUrl';var webPage = require('webpage');var page = webPage.create();if(opera == 'openUrl') {// 打开URL页面pageInfo['url'] = (typeof post.url != 'undefined') ? post.url : '';pageInfo['postData'] = (typeof post.postData != 'undefined') ? post.postData : '';pageInfo['loadSource'] = (typeof post.loadSource != 'undefined' && post.loadSource == 'no') ? false : true;var body = '';if(pageInfo['loadSource'] === false) {page.settings.javascriptEnabled = false;page.settings.loadImages = false;}if(pageInfo.url) {page.open(pageInfo.url, function(status) {body = page['content'];console.log('url:'+pageInfo.url);console.log('Status: ' + status);response.statusCode = 200;response.write(body);response.close();})} else {response.statusCode = 200;response.write('请传URL');response.close();}} else if(opera == 'parseJs') {// 解析JSpage.open('', function(status) {var code = "eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('e i={\'g\':6,\'l\':\'豪门第一盛婚\',\'f\':\'/6/k\',\'d\':\'/6/8\',\'7\':\'/6/9\',\'a\':\'0话\',\'c\':[\'/3/2/h/5/0/b.4\',\'/3/2/h/5/0/j.4\',\'/3/2/h/5/0/w.4\',\'/3/2/h/5/0/v.4\',\'/3/2/h/5/0/u.4\',\'/3/2/h/5/0/m.4\',\'/3/2/h/5/0/x.4\',\'/3/2/h/5/0/y.4\',\'/3/2/h/5/0/t.4\',\'/3/2/h/5/0/s.4\',\'/3/2/h/5/0/o.4\'],\'n\':p,\'q\':\'/6/\',\'r\':1};',35,35,'116||tuku|ManHuaKu|jpg|haomendiyishenghun|25651|pcid|0120|0118|ctitle|1612|fs|ncid|var|cid|bid||cInfo|1613|0119|btitle|1617|fc|kz5thyicgkd1622|11|burl|bs|xuaghwz33ar1621|1620|1616|1615|1614|1618|1619'.split('|'),0,{}))";code = code.replace(/^eval/, ''); var title = page.evaluate(function(s) {return eval("(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('x l={\'q\':f,\'j\':\'豪门第一盛婚\',\'m\':\'/f/3\',\'u\':\'/f/2\',\'v\':\'/f/0\',\'n\':\'5话\',\'p\':[\'/g/w/q/r/5/6.s\',\'/g/w/q/r/5/7.s\',\'/g/w/q/r/5/8.s\',\'/g/w/q/r/5/9.s\',\'/g/w/q/r/5/a.s\',\'/g/w/q/r/5/b.s\',\'/g/w/q/r/5/c.s\',\'/g/w/q/r/5/d.s\',\'/g/w/q/r/5/e.s\',\'/g/w/q/r/5/y.s\',\'/g/w/q/r/5/t.s\'],\'o\':4,\'k\':\'/f/\',\'i\':3};',62,35,'0118|0119|0120|1|11|116|1612|1613|1614|1615|1616|1617|1618|1619|1620|25651|ManHuaKu|bid|bs|btitle|burl|cInfo|cid|ctitle|fc|fs|h|haomendiyishenghun|jpg|kz5thyicgkd1622|ncid|pcid|tuku|var|xuaghwz33ar1621'.split('|'),0,{}))");}, code);//console.log(code)
            console.log(title)//response.statusCode = 200;//response.write(eval(code));//response.close();
            phantom.exit();});}
});

View Code

注意监听的端口不要已经被使用了哦

转载于:https://www.cnblogs.com/xuweiqiang/p/10361088.html

phantomjs搭建输出js渲染后的html接口相关推荐

  1. python获取js渲染后的源码_Python使用PAMIE获取JS渲染后的HTML源码 - 米扑博客

    前因 现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面.这对采集来说,是一个很大的挑战. 在 ...

  2. [UE4]RetainerBox,控制UI更新频率,把渲染后的UI当成Texture

    RetainerBox是一个容器,只会影响其容器内的UI,RetainerBox的作用: 一.控制UI更新频率(可能是为有优化性能) 1.在UserWidget中添加Retainer Box容器,并在 ...

  3. 手把手教你学node之搭建node.js开发环境

    搭建node.js开发环境 本文只针对在Linux或者Mac下面.至于使用 Windows 并坚持玩新技术的同学,我坚信他们一定有着过人的.甚至是不可告人的兼容性 bug 处理能力,所以这部分同学麻烦 ...

  4. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志

    为什么80%的码农都做不了架构师?>>>    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的 ...

  5. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器

    http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...

  6. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  7. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源

    视频地址:www.cctalk.com/v/151149238- 处理静态资源 无非花开花落,静静. 指定静态资源目录 这里我们使用第三方中间件: koa-static 安装并使用 安装 koa-st ...

  8. [转]ASP.NET中常用输出JS脚本的类

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.We ...

  9. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router

    路由koa-router--MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼.阿干.三三.小虎.胖子.小哈.DDU.可木.晃晃 文案校对:李益.大力萌.Au.DDU. ...

最新文章

  1. http和https的区别 与 SSL/TLS协议运行机制的概述
  2. Vmware workstation 网络连接类型
  3. SpringCloud之微服务
  4. Exchannge 2013数据库副本频繁自动切换
  5. Response_案例3_输出字节数据
  6. 使用阿里云容器服务Kubernetes实现蓝绿发布功能
  7. angular组件-特殊的瀑布流(原创)
  8. MKL学习——数学运算库安装调试
  9. 数据结构二之线段树Ⅱ——KiKi‘s K-Number,ball,The Child and Sequence,「雅礼集训 2017 Day1」市场,Atlantis
  10. ZT:Java代码编写的30条建议
  11. Bootstrap 警告框的外观
  12. 【codevs3304】水果姐逛水果店Ⅰ,线段树练习
  13. 电压源和电流的关联参考方向_基于动态随机均衡的电流舵数模转换器设计
  14. 全球首列氢燃料混合动力有轨电车成功商业运营,全程“无网”运行
  15. 斐讯K1、K2、K2P 刷机、刷入Breed@重庆网吧电竞酒店维护小哥
  16. Strom 消息可靠性保障机制和Ack原理
  17. 关于RedisPool配置参数
  18. 德硕ABeam三位顾问获得SAP认证,企业数字转型有保障
  19. wxml 点击图片下载_小程序图表插件
  20. Squid - 403 Forbidden (SSH via HTTP Proxy)

热门文章

  1. 关于@SuppressWarnings(unchecked)注解
  2. Linux发邮件之mail命令
  3. 咋一看DWoo 比 Smarty要好
  4. VLM:Meta AI CMU提出任务无关视频语言模型视频理解预训练VLM,代码已开源!(ACL 2021)...
  5. 经典重温:FAIR提出SlowFast,用双分支非对称网络处理不同采样率的视频!代码开源!...
  6. CVPR2019 | 弱监督图像分类建模
  7. 700 页的机器学习总结火了!
  8. 斯坦福2019秋季课程:图机器学习资料全公开
  9. python__画图表可参考(转自:寒小阳 逻辑回归应用之Kaggle泰坦尼克之灾)
  10. 等式与不等式约束的序列二次规划(SQP)