- Get Started
- 基础
- 进阶
- 技巧
- 插件推荐
- API
- Get Started
- 基础 API
- QueryList html($html)
- string getHtml($rel = true)
- QueryList rules(array $rules)
- QueryList range($selector)
- QueryList removeHead()
- QueryList query(Closure $callback = null)
- Collection getData(Closure $callback = null)
- Array queryData(Closure $callback = null)
- QueryList static getInstance()
- void destruct()
- void destructDocuments() 静态方法
- QueryList pipe(Closure $callback)
- 特殊 API
- 高级 API
- 默认插件
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
PhantomJS 插件
使用PhantomJS采集JavaScript动态渲染的页面。这个包基于jonnyw/php-phantomjs
包。
PhantomJS: http://phantomjs.org
jonnyw/php-phantomjs: https://github.com/jonnnnyw/php-phantomjs
安装
composer require jaeger/querylist-phantomjs
然后还需要去PhantomJS
官网下载对应你电脑系统的PhantomJS
二进制文件,放到电脑任意路径,下面会用到这个路径,下载页面直达:http://phantomjs.org/download.html
BUG修复
如果运行报下面错:
PHP Warning: Declaration of JonnyW\PhantomJs\DependencyInjection\ServiceContainer::load() should be compatible with Symfony\Component\DependencyInjection\Container::load($file) in /wwwroot/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/DependencyInjection/ServiceContainer.php on line 20
这是jonnyw/php-phantomjs
这个包的bug,已提交给作者等待被修复,在作者未修复前,我们可以通过以下2种方式解决:
方法一: 忽略这个警告,这个警告不影响程序的正确运行,可以屏蔽之。
方法二: 手动修改源码,修改文件vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/DependencyInjection/ServiceContainer.php
中的load()
函数加个参数并给个默认值:
public function load($file = null)
{
//...
}
API
- browser($url,$debug = false,$commandOpt = []):使用浏览器打开连接 ,return QueryList
- $url : 待采集的url或者返回
\JonnyW\PhantomJs\Http\RequestInterface
对象的匿名函数 - $debug : 是否开启debug调试,打印更多信息
- $commandOpt : 设置phantomjs命令行参数,详情:http://phantomjs.org/api/command-line.html
- $url : 待采集的url或者返回
安装参数
QueryList::use(PhantomJs::class,$opt1,$opt2)
- $opt1: PhantomJS二进制文件路径
- $opt2:
browser
函数别名
用法
- Installation Plugin
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');
// Windows下示例
// 注意:路径里面不能有空格中文之类的
$ql->use(PhantomJs::class,'C:/phantomjs/bin/phantomjs.exe');
- Example-1
$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);
$data = $ql->browser('https://m.toutiao.com')->find('p')->texts();
print_r($data->all());
// 更多选项可以查看文档: 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
$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());
- Example-3
$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());
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论