PHP获取HTML内容及动态渲染js加载内容

  写爬虫的时候,使用guzzle异步并发的get请求真的好用,可以快速爬取,及时PHP不是多线程的,却能使用协程实现异步并发-用户态的多线程,也有时候,请求地址返回的页面很多待执行的JavaScript代码,数据需要动态渲染上去,这里有个简单的方法

就是使用querylist,用了这个扩展也可以不再依赖php的dom解析工具-simpledom,也自带了远程获取功能。

1.安装

安装querylist

composer require jaeger/querylist

安装phantomjs

composer require jaeger/querylist-phantomjs  //PHP版本必须 >=7.0

下载对应你电脑系统的PhantomJS二进制文件,放到电脑任意路径,下面会用到这个路径,下载页面直达:http://phantomjs.org/download.html

2.使用

Linux下示例:

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‘);
$html = $ql->browser(‘https://m.toutiao.com‘)->getHtml();
print_r($html);

相关文档:

https://doc.querylist.cc/

示例:

检索书籍在百度的搜索排行榜,直接curl发送get请求获取到的html是木有数据的,因为搜索结果页是异步JavaScript获取的。

<?php

// 设置脚本超时
set_time_limit(0);
// 内存限制
ini_set(‘memory_limit‘, ‘2014M‘);
// 第三方库
require_once(‘./vendor/autoload.php‘);
use QL\QueryList;
use QL\Ext\PhantomJs;
// 获取搜索结果
$book_name = ‘我的贴身校花‘;
$ql = QueryList::getInstance();
$ql->use(PhantomJs::class,‘D:\webserver\www\phantomjs.exe‘);
$html = $ql->browser(‘https://m.baidu.com/s?word=‘.urlencode($book_name))->getHtml();
$z = $ql->find(‘.c-result-content:eq(0)‘)->find(‘.c-color-gray:eq(0)‘)->texts();
$z = $z->all();
file_put_contents(‘./check.log‘, $v.‘ ==> ‘.current($z)."\n", FILE_APPEND);

搜索截图:

---------------------
作者:qq_42413925
来源:CSDN
原文:https://blog.csdn.net/qq_42413925/article/details/80619697
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/xuweiqiang/p/9829127.html

时间: 2024-10-09 06:15:54

PHP获取HTML内容及动态渲染js加载内容的相关文章

Win8 Metro动态加载内容框架

制作背景 为了参加ImagineCup 2013 世界公民类比赛,我们设计制作了一个可动态扩展的幼教类App.这个App需要能动态加载内容,内容包括带动画可交互的电子书,动画,视频,游戏. 技术支持 2012年10月第一次:因为SVG性能问题,将SVG换为cocos2d-x JSBind,可惜cocos2d-x JSBind不完善,最后换为cocos2d-x html5.11月第二次:cocos2d-x html5性能问题,破产.12月第三次:取消HTML5,转为使用XAML+JS模式. (微软

在ASP.NET中动态加载内容(用户控件和模板)

在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30% runat=server id=Con

使用js加载器动态加载外部Javascript文件

今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js 1 var MiniSite=new Object(); 2 /** 3 * 判断浏览器 4 */ 5 MiniSite.Browser={ 6 ie:/msie/.test(window.navigator.userAgent.toLowerCase()), 7 moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), 8 opera:/o

页面滚动动态加载数据,页面下拉自动加载内容 jquery

<!DOCTYPE=html> <html> <head> < script src="js/jquery.js" type="text/javascript"></ script> < script type="text/javascript"> $(document).ready(function(){ var range = 50; //距下边界长度/单位px var

JS加载获取父窗体传递的参数

JS加载获取父窗体传递的参数 $(document).ready(function () { var query = location.search.substring(1); var values = query.split("&"); for (var i = 0; i < values.length; i++) { var pos = values[i].indexOf('='); if (pos == -1) continue; var paramname = v

FusionCharts简单教程(二)-----使用js加载图像和setDataXML()加载数据

前面一篇对FusionCharts进行了一个简单的介绍,而且建立了我们第一个图形,但是那个是在HTML中使用<OBJECT> 和<EMBED>标记来加载图形的,但是这样做是非常不“理智”的.这样做除了代码量比较大外,还有并不是所有的人能够看懂上面的代码.但是 使用JS后就可以避免上面几个问题了. 一.使用JS加载FusionCharts图形 下面就分五个步骤讲解如何使用js来加载FusionCharts图形. 第一步:导入FusionCharts.js文件 [javascript]

(转)JS加载顺序

原文:http://blog.csdn.net/dannywj1371/article/details/7048076 JS加载顺序 做一名合格的前端开发工程师(12篇)--第一篇 Javascript加载执行问题探索 楼主做前端开发一年多了,对前端的见解还是多多少少有一点的,今天特拿出来跟大家分享分享. 做前端开发少不了各种利器.比如我习惯用的还是Google浏览器和重型武器Fiddller. 一: 原始情况 首先大家看看如下的代码: 1 <%@ Page Language="C#&qu

js加载xml文件xin

js加载xml文件 作为刚进入软件开发大军的我,以一个水军的资格开始做梦,以一个画者的资格在'一张白纸'上开始涂抹.工作在哪里??工作在哪里呢??? 今天发现一道面试题: 附件中有一个城市列表的city.xml文件,现在需要您通过Javascript脚本对该文件进行解析,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息(界面布局请参考test1.html文件,也可以自行定义). 上网查了一天的资料,绞尽脑汁的试着网上前辈的各种方法,为什么一个个别人成功的案例,

jquery scroll 自动加载内容

当拖动滚动条时,自动加载内容 </pre><pre name="code" class="javascript">1. 首先计算li的总数 </pre><pre code_snippet_id="683281" snippet_file_name="blog_20150603_5_4812406" name="code" class="javascript