querylist 的phantomjs插件无法使用自定义UA,反正我是一只没有搞定,网路上也没有资料。最后使用以下替代方法。
直接通过 JonnyW\PhantomJs 获取PhantomJs 浏览器入口,返回结果交给querylist 使用。其实querylist 的插件phantomjs也是这个方法,但是封装以后没有找到设置接口。
phantomjs的二进制文件请到官网下载。
注:phantomjs现在已经停止更新,以后可以关注chrome、firefox的无头模式。
我这里没有找到chrome、firefox无头模式的php使用方法,网上全部是基于selenium的python代码。希望尽快会有吧。
composer.json 文件:{
"require": {
"jaeger/querylist": "^4.1",
"jaeger/querylist-phantomjs": "^4.0"
}
}
PHP 代码:<?php
use QL\QueryList;
use JonnyW\PhantomJs\Client;
//这里定义PHANTOMJS的二进制路径
define('PHANTOMJS_PATH', 'G:\phpStudy\tools\phantomjs-2.1.1-windows\bin\phantomjs.exe');
include './composer/vendor/autoload.php';
//调用浏览器方法,获取动态加载的html
$html = browse('https://item.taobao.com/item.htm?id=586306700198');
//这里需要前后加上html的开始结束标签,不知道为什么QueryList不能正确解析PhantomJs的返回数据
$ql = QueryList::html(''.$html.'');
//测试过程中发现图片懒加载的地方,没有加载正确的图片,不知道phantomjs有没有自动滚动页面的方法
$text1 = $ql->find('#J_DivItemDesc img')->attrs('data-ks-lazyload');
$text2 = $ql->find('#J_DivItemDesc img')->attrs('src');
// 转码
// $text = mb_convert_encoding($text,'utf-8','gbk');
// $text = htmlspecialchars($text,ENT_SUBSTITUTE,'utf-8');
// $text = mb_convert_encoding($text,'gbk','utf-8');
var_dump($text1->all());
echo '
';
var_dump($text2->all()) ;
/**
*
* @param string $url
* @return string
*/
function browse($url){
//获取一个浏览器
$client = Client::getInstance();
//设置phantomjs位置
$client->getEngine()->setPath(PHANTOMJS_PATH);
//禁止加载图片
$client->getEngine()->addOption('--load-images=false');
//忽略ssl错误
$client->getEngine()->addOption('--ignore-ssl-errors=true');
//获取$request对象
$request = $client->getMessageFactory()->createRequest($url, 'GET');
//设置超时
$timeout = 10000;
$request->setTimeout($timeout);
//伪造UA
$request->addSetting('userAgent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36');
//获取$response对象
$response = $client->getMessageFactory()->createResponse();
//执行
$client->send($request, $response);
return $response->getContent();
}
JonnyW\PhantomJs 的使用方法参考了:https://blog.csdn.net/mxdzchallpp/article/details/82971348