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. Java基础(三十三)JDBC(3)操作数据库

    一.添加数据 在SQL语句中,一条INSERT语句只能添加一条记录,因此分为几种情况进行添加数据操作. 1.添加一条记录 (1)如果只需要添加一条记录,通常情况下通过Statament实例完成. tr ...

  2. Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  3. jquery复习

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

  4. [翻译]Jupyter notebook .NET Core 内核预览1

    当您想到Jupyter Notebooks时,您可能会考虑使用Python,R,Julia或Scala而不是.NET编写代码. 今天,我们很高兴宣布您可以在Jupyter Notebooks中编写.N ...

  5. 修改tomcat默认使用的jdk版本

    1.windows平台 在csetclasspath.bat文件开头加上如下两句(指定JDK): set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_79  se ...

  6. Django学习day7——简单的使用数据库和模型

    Django支持的数据库 PostgreSQL SQLite 3 MySQL Oracle 其中SQLite 3不需要安装,因为SQLite使用文件系统上的独立文件来存储数据 这里我们用SQLite ...

  7. java核心编程书上的一个错误

    书上说这段代码说明了java对对象不是采用的按引用调用 这明显错了,java还是引用传递,只是把引用对象的变量复制了,互换了x,y所指的对象,对a,b没有影响

  8. 小奇的仓库:换根dp

    一道很好的换根dp题.考场上现场yy十分愉快 给定树,求每个点的到其它所有点的距离异或上m之后的值,n=100000,m<=16 只能线性复杂度求解,m又小得奇怪.或者带一个log像kx一样打一 ...

  9. 详解SpringBoot应用跨域访问解决方案

    一.什么是跨域访问 说到跨域访问,必须先解释一个名词:同源策略.所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同.Host(ip)相同.端口相同的条件,否则访问将被禁止,该访 ...

  10. scss新手使用指南

    还在用死的css写样式吗?那可太麻烦了,各种长串选择器不说,还有各种继承权重有时候还有可能不生效 我的小程序项目也结束了,是时候总结一下scss语法了,毕竟用起来更加方便而且还能精简一点代码,好处多多 ...