QueryList使用jQuery的方式来做采集,拥有丰富的插件。

下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容。

安装

使用Composer安装:

安装QueryList

1

2

composer require jaeger/querylist

GitHub: https://github.com/jae-jae/QueryList

安装PhantomJS插件

1

2

composer require jaeger/querylist-phantomjs

GitHub: https://github.com/jae-jae/QueryList-PhantomJS

下载PhantomJS二进制文件

PhantomJS官网:http://phantomjs.org ,下载对应平台的PhantomJS二进制文件。

插件API

QueryList browser($url,$debug = false,$commandOpt = []):使用浏览器打开连接

使用

以采集「今日头条」手机版为例,「今日头条」手机版基于React框架,内容是纯动态渲染出来的。

下面演示QueryList的PhantomJs插件用法:

安装插件

1

2

3

4

5

6

7

use QL\QueryList;

use QL\Ext\PhantomJs;

$ql = QueryList::getInstance();

// 安装时需要设置PhantomJS二进制文件路径

$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');

//or Custom function name

$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');

Example-1

获取动态渲染的HTML:

1

2

$html = $ql->browser('https://m.toutiao.com')->getHtml();

print_r($html);

获取所有p标签文本内容:

1

2

$data = $ql->browser('https://m.toutiao.com')->find('p')->texts();

print_r($data->all());

输出:

1

2

3

4

5

6

7

Array

(

    [0] => 自拍模式开启!国庆假期我和国旗合个影

    [1] => 你旅途已开始 他们仍在自己的岗位上为你的假期保驾护航

    [2] => 喜极而泣,都教授终于回到地球了!

    //....

)

使用http代理:

1

2

3

4

5

6

// 更多选项可以查看文档: http://phantomjs.org/api/command-line.html

$ql->browser('https://m.toutiao.com',true,[

    // 使用http代理

    '--proxy' => '192.168.1.42:8080',

    '--proxy-type' => 'http'

])

Example-2

自定义一个复杂的请求:

1

2

3

4

5

6

7

8

$data = $ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r){

    $r->setMethod('GET');

    $r->setUrl('https://m.toutiao.com');

    $r->setTimeout(10000); // 10 seconds

    $r->setDelay(3); // 3 seconds

    return $r;

})->find('p')->texts();

print_r($data->all());

开启debug模式,并从本地加载cookie文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

$data = $ql->browser(function (\JonnyW\PhantomJs\Http\RequestInterface $r){

    $r->setMethod('GET');

    $r->setUrl('https://m.toutiao.com');

    $r->setTimeout(10000); // 10 seconds

    $r->setDelay(3); // 3 seconds

    return $r;

},true,[

    '--cookies-file' => '/path/to/cookies.txt'

])->rules([

    'title' => ['p','text'],

    'link' => ['a','href']

])->query()->getData();

print_r($data->all());

明确的学习思路能更高效的学习

点此加入该群学习

php使用QueryList轻松采集JavaScript动态渲染页面的更多相关文章

  1. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

  2. 动态渲染页面爬取(Python 网络爬虫) ---Selenium的使用

    Selenium 的使用 Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaS ...

  3. 爬虫动态渲染页面爬取之Splash的介绍和使用

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...

  4. 爬虫动态渲染页面爬取之selenium驱动chrome浏览器的使用

    Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,可以用其进行网页动态渲染页面的爬取. 支持的浏览器包括IE(7, 8, 9, 10 ...

  5. 微信小程序——动态渲染页面、路径传参

      1.动态渲染页面.改变css.样式必须setData渲染过去   this.setData({ userInfo: app.globalData.userInfo, token: app.glob ...

  6. JavaScript动态更改页面元素

    通过JavaScript动态变化HTML元素 至HTML加元 首先需要创建一个标签,然后添加到标签中的相应的内容.然后创建添加到相应的位置好标签. <!DOCTYPE html PUBLIC & ...

  7. 动态渲染页面爬取-Selenium & Splash

    模拟浏览器的动机 JS动态渲染的页面不止Ajax一种 很多网页的Ajax接口含有加密参数,分析其规律的成本过高 通过对浏览器运行方式的模拟,我们将做到:可见即可爬 Python中常用的模拟浏览器运行的 ...

  8. scrapy+selenium+chromedriver解析动态渲染页面

    背景:动态页面是页面是通过js代码渲染出来的,无法直接使用scrapy爬虫,这是就需要先把js代码转为静态的html,再用scrapy爬虫就可以解决 解决办法:增加SeleniumMiddleware ...

  9. 爬虫之Selenium 动态渲染页面爬取

    Selenim 是一个自动化测试工具,可以利用它驱动浏览器执行特定的动作,如点击.下拉等操作,同时可以获取浏览器当前呈现的页面的源代码,做到可见及可爬 1.使用流程 1)声明浏览器对象 Seleniu ...

随机推荐

  1. 推荐一款简单易用线上引流测试工具:GoReplay

    一. 引流测试产生背景 日常大部分的测试工作都是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致, ...

  2. Oracle数据库 常见的SQL题,复习

    01.查询员工表所有数据,并说明使用*的缺点 select * from emp 02.查询职位(JOB)为'PRESIDENT'的员工的工资 select sal from emp where jo ...

  3. Java多线程编程(三)线程间通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  4. unity 截屏总结

    转载与https://www.cnblogs.com/MissLi/p/8005342.html 1.针对指定的相机进行截屏 此中方式要添加yield return waitfortheEndofFr ...

  5. video3

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. chrome安装json美化软件 JSONView

    安装效果如下: 安装步骤: 1.下载地址: github地址:https://github.com/gildas-lormeau/JSONView-for-Chrome 2.解压文件 3.打开谷歌浏览 ...

  7. 二叉树,红黑树,B树,B+树

    1.不要认为红黑树仅仅是在二叉树的节点上涂上颜色,他们最根本的区别是,红黑树根据节点涂色的约束限制,最终形成的树的结构与普通二叉树不同,最重要的是,其树的高度大大缩短,从而在查找.增删改等方面提高效率 ...

  8. Vue---mock.js 使用

    mockjs 概述 在我们的生产实际中,后端的接口往往是较晚才会出来,并且还要写接口文档,于是我们的前端的许多开发都要等到接口给我们才能进行,这样对于我们前端来说显得十分的被动,于是有没有可以制造假数 ...

  9. Windows 10 与 kali 双系统安装

    一.教程中用到的工具如下: 1.kali 2019镜像, 2.U盘 现在最低也有8G吧 3.软碟通 ,U盘刻录工具 4.win 10系统要留出一个空的硬盘,哪个盘的空间比较大可以压缩出大概100G的空 ...

  10. 视口viewport与单位rem的本质

    结论: 视口viewport的设置是为了让字的显示在不同的屏幕下保持一致. 单位rem的使用是为了让页面中的布局元素的比例在不同的屏幕下显示的比例保持一致. 现象: 我们看电脑时候的网页的时候的字体大 ...