简介

如何在php中方便地解析html代码,估计是每个phper都会遇到的问题。用phpQuery就可以让php处理html代码像jQuery一样方便。

项目地址:https://code.google.com/p/phpquery/

github地址:https://github.com/TobiaszCudnik/phpquery

DEMO

下载库文件:https://code.google.com/p/phpquery/downloads/list

我下的是onefile版:phpQuery-0.9.5.386-onefile.zip

官方demo:https://code.google.com/p/phpquery/source/browse/branches/dev/demo.php

然后在项目中引用。

html文件test.html:

  1. <div class="thumb" id="Thumb-13164-3640" style="position: absolute; left: 0px; top: 0px;">
  2. <a href="/Spiderman-City-Drive">
  3. <img src="/thumb/12/Spiderman-City-Drive.jpg" alt="">
  4. <span class="GameName" id="GameName-13164-3640" style="display: none;">Spiderman City Drive</span>
  5. <span class="GameRating" id="GameRating-13164-3640" style="display: none;">
  6. <span style="width: 68.14816px;"></span>
  7. </span>
  8. </a>
  9. </div>
  10. <div class="thumb" id="Thumb-13169-5946" style="position: absolute; left: 190px; top: 0px;">
  11. <a href="/Spiderman-City-Raid">
  12. <img src="/thumb/12/Spiderman-City-Raid.jpg" alt="">
  13. <span class="GameName" id="GameName-13169-5946" style="display: none;">Spiderman - City Raid</span>
  14. <span class="GameRating" id="GameRating-13169-5946" style="display: none;">
  15. <span style="width: 67.01152px;"></span>
  16. </span>
  17. </a>
  18. </div>

php处理:

  1. <?php
  2. include('phpQuery-onefile.php');
  3.  
  4. $filePath = 'test.html';
  5. $fileContent = file_get_contents($filePath);
  6. $doc = phpQuery::newDocumentHTML($fileContent);
  7. phpQuery::selectDocument($doc);
  8. $data = array(
  9. 'name' => array(),
  10. 'href' => array(),
  11. 'img' => array()
  12. );
  13. foreach (pq('a') as $t) {
  14. $href = $t -> getAttribute('href');
  15. $data['href'][] = $href;
  16. }
  17. foreach (pq('img') as $img) {
  18. $data['img'][] = $domain . $img -> getAttribute('src');
  19. }
  20. foreach (pq('.GameName') as $name) {
  21. $data['name'][] = $name -> nodeValue;
  22. }
  23. var_dump($data);
  24. ?>

上面的代码中包含了取属性和innerText内容(通过nodeValue取)。

输出:

  1. array (size=3)
  2. 'name' =>
  3. array (size=2)
  4. 0 => string 'Spiderman City Drive' (length=20)
  5. 1 => string 'Spiderman - City Raid' (length=21)
  6. 'href' =>
  7. array (size=2)
  8. 0 => string 'http://www.gahe.com/Spiderman-City-Drive' (length=40)
  9. 1 => string 'http://www.gahe.com/Spiderman-City-Raid' (length=39)
  10. 'img' =>
  11. array (size=2)
  12. 0 => string 'http://www.gahe.com/thumb/12/Spiderman-City-Drive.jpg' (length=53)
  13. 1 => string 'http://www.gahe.com/thumb/12/Spiderman-City-Raid.jpg' (length=52)

强大的是pq选择器,语法类似jQuery,很方便。

用phpQuery像jquery一样解析html代码的更多相关文章

  1. jquery eval解析JSON中的注意点介绍

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:使用eval()函数.使用Function对象来进行返回解析,下面有个示例,感兴趣的朋友可以参考下   在JS中将JSON的字符串解析 ...

  2. jQuery ajax解析xml文件demo

    解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...

  3. jquery json解析详解

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: 1 {"comments":[ ...

  4. 可控制导航下拉方向的jQuery下拉菜单代码

    效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...

  5. jquery树形菜单完整代码

    本实例实现了树形的动态菜单,兼容IE8,火狐,Chrome等浏览器.使用了jQuery的toggle() 方法.效果和代码如下: <!DOCTYPE html PUBLIC "-//W ...

  6. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  7. 分析和解析PHP代码的7大工具

    PHP已成为时下最热门的编程语言之一,然而却有许多PHP程序员苦恼找不到合适的工具来帮助自己分析和解析PHP代码.今天小编就为大家介绍几个非常不错的工具,来帮助程序员们提高自己的工作效率,一起来看看吧 ...

  8. 10 个实用的 jQuery 表单操作代码片段

    jQuery 绝对是一个伟大的开源JavaScript类库,是帮助我们快速和高效开发前端应用的利器.可能大家在日常的开发过程中常常会处理表单相关的 JavaScript,在今天这篇代码片段分享文章中, ...

  9. jQuery select的操作代码

    jQuery對select的操作的实际应用代码. //改變時的事件  复制代码代码如下: $("#testSelect").change(function(){ //事件發生  j ...

随机推荐

  1. 02.[WPF]如何固定窗口的大小

    在WPF开发过程中碰到一个需求,要求保证窗口大小不变,即便是双击 titlebar 也不能改变窗口大小和位置.要实现这样的效果,需要执行如下步骤: 1,分别设置窗口的 Width/MaxWidth/M ...

  2. one way WebService

    WSDL支持4种消息交换方式:   1)单向(One-way):服务端接收消息:   2)请求响应(Request-response):服务端点接收请求消息,然后发送响应消息:   3)要求应答(So ...

  3. [转帖]FPGA--Vivado

    来源:http://home.eeworld.com.cn/my/space-uid-639749-blogid-267593.html 一般的,在Verilog中最常用的编码方式有二进制编码(Bin ...

  4. oracle 中查看一张表是否有主键,主键在哪个字段上的语句怎么查如要查aa表,

    select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constra ...

  5. NgNice项目案例

    技术构架: 服务端技术:NodeJS + Express4.x + Mongodb + Mongoose 前端技术: AngularJS1.2.x + Bootstrap3.x 源码:https:// ...

  6. gulp安装

    1. npm install gulp -g    全局安装  npm install gulp --save-dev  安装文件内,纪录于package.json     接著安装插件,完成下列任务 ...

  7. 插入排序(C++)

    插入排序(C++) 插入排序: 写这篇博文是为了增加对数据结构和算法的理解,同事增加编程的基本功. 当要对如下数据进行排序: 2,8,5,4,6,7,1 2,8,5,4,6,7,1    采用插入排序 ...

  8. C++序列化库的实现

    C++中经常需要用到序列化与反序列化功能,由于C++标准中没有提供此功能,于是就出现了各式各样的序列化库,如boost中的,如谷歌的开源项目,但是很多库都依赖其他库过于严重,导致库变得很庞大.今天来分 ...

  9. Winform控件Enable=false显示优化

    在B/S开发中(ASP.NET),往往可以css样式表来让页面控件更加美观,但是在C/S中(Winform)里面,我们则需要通过其他取巧的 方式来实现.例如:当你因为某个需求需要将控件设置为Reado ...

  10. mysql数据类型——浮点和定点型

    mysql数据类型 字节 含义 float(m,d)           4字节  单精度浮点型,8位精度,m是十进制数字的总个数,d是小数点后面的数字个数 double(m,d)        8字 ...