PHP 爬虫体验(三) - 使用PHP + puppeteer爬取js动态渲染的页面内容
时间:2019-10-09
本文章向大家介绍PHP 爬虫体验(三) - 使用PHP + puppeteer爬取js动态渲染的页面内容,主要包括PHP 爬虫体验(三) - 使用PHP + puppeteer爬取js动态渲染的页面内容使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前写的两篇爬虫体验基本上涵盖了一般的Html页面提取场景,但是有些时候,如果目标页面不是纯静态的页面,而是使用js动态渲染的页面(比如one),之前的爬虫就不好使了,这种时候就要借助一些其他工具来进行实现。
一般爬取动态页面的思路是通过软件模拟浏览器行为获取到渲染后的页面镜像,然后再对渲染后的页面进行分析,常用的工具有selenium,phantomJs,puppeteer等,通过对项目维护程度、对PHP友好度的对比,我选用的是puppeteer。
根据官方介绍,谷歌在2017年开发了自家Chrome浏览器的Headless特性,puppeteer便是这个时候诞生的,它的原理是通过调用Chrome DevTools开放的接口与Chrome通信,将浏览器开放接口进行封装,方便用户调用,可以很容易地实现浏览器行为的模拟。
尝试一下puppeteer,安装起来其实非常简单:
1 | npm i puppeteer |
根据官方API写了example.js进行测试:
1 | async function (){ |
执行node example.js便可以看到控制台输出了渲染完成之后的页面Html,这个时候便能够使用php的fopen读取stdout获取到html文本进行下一步处理了。
在github上面查找相关支持,发现有spatie/browsershot这个项目直接把操作步骤封装好了,这样便可以使用puppeteer进行动态生成html内容的获取,然后继续使用dom-crawler来获取想要抓取的内容了:
1 | $this->crawler = new Crawler(); |
原文:大专栏 PHP 爬虫体验(三) - 使用PHP + puppeteer爬取js动态渲染的页面内容
原文地址:https://www.cnblogs.com/sanxiandoupi/p/11641858.html
- linux下查询域名或IP注册信息的操作记录(whois)
- 域名资讯:多枚区块链域名结拍,区块链概念火热
- 一批好米交易:qrf.com15.4万元结拍
- mysql主从同步(2)-问题梳理
- 老丁独家!前方高能,与“程序崩溃”的第一次邂逅!
- 微信可接收火车购票、退票及改签等通知啦!别忘了,春运火车票下周开售!
- 如何用SPSS分析问卷?用SPSS分析调查问卷数据的方法
- 【5】基于Log4Net的日志系统
- VMware vSphere虚拟化-VMware ESXi 5.5组件安装过程记录
- 淘宝iOS端圣诞节雪花实现分析
- 【6】页面数据和控件的自动交换机制
- silverlight版的图片轮换广告
- Centos下PPTP环境部署记录
- 电商小程序的场景使用和营销手段
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【pytorch】改造resnet为全卷积神经网络以适应不同大小的输入
- springmvc之数据的格式化
- 【python-leetcode207-拓扑排序】课程表
- 定时任务最简单的3种实现方法(Java)
- 回顾通用链表(亲测代码示例)
- 【python-leetcode210-拓扑排序】课程表Ⅱ
- Java实现最小生成树算法之Kruskal算法
- 来我们再聊聊 KMP 算法 -- 我懂,你也得懂
- 【pytorch】简单的线性回归
- 简单的并查集的实现
- 【python-leetcode269-拓扑排序】火星字典
- 通俗点聊聊算法 - 排序(3)快速排序,亲测
- springmvc之如何对表单数据进行校验
- 基于TypeScript封装Axios笔记(七)
- 2015年javaB组1-4题解析与理解