摘要:PHP爬虫(1中详细了介绍了CURL抓取HTML数据的技术。采集数据处理也是爬虫技术中非常重要的部分。处理HTML数据可以用字符串查找,也可以利用正则表达式,但采用Dom处理是最高级的方法。

现在我们要抓取中国军网首页“军媒要闻要论”第一条内容,

通过浏览器工具查看网页元素,通过console获取数据。通过下图我们可以看到,在浏览器中我们可以方便调用Jquery的dom查找函数,轻松找到数据,PHP中是否也有这样的工具可以很方便的处理DOM?

在github上查找php dom parse,我们找到sunra/php-simple-html-dom-parser,使用用户还挺多的。下面我们介绍如何使用PhpDomParse组件,分别介绍直接引用、composer、ThinkPhp中如何使用。

1.直接引用

首选下载组件文件夹,在当前工程目录中执行

git clone https://github.com/sunra/php-simple-html-dom-parser.git

此时,工程目录下就会多出php-simpple-html-dom-parser文件夹,文件夹目录如下图

引用HtmlDomParaer.php

<?php
include "./php-simple-html-dom-parser/Src/Sunra/PhpSimple/HtmlDomParser.php";
use Sunra\PhpSimple\HtmlDomParser;
$url = "http://www.81.cn";
$dom = HtmlDomParser::file_get_html( $url );
$u = $dom->find("#JMYWYL dt",0);
$title = $u ->find('a',0);
echo $title->innertext;
?>

2.Composer调用方法

在工程目录下安装Composer.phar,创建composer.json文件,

{
"require": {
"sunra/php-simple-html-dom-parser": "v1.5.0"
}
}

运行,php compose.phar install

Composer会根据composer.json内容,下载需要的文件,安装成功之后,工程文件夹如下,

代码如下,系统会自动加载\Sunra\PhpSimple\HtmlDomParse

<?php
require __DIR__ . '/vendor/autoload.php';
$url = "http://www.81.cn";
$dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html( $url );
$u = $dom->find("#JMYWYL dt",0);
$title = $u ->find('a',0);
echo $title->innertext;
?>

3、thinkphp框架

笔者日常也是使用TP框架的,也许有的读者没在TP中引入其他框架。TP提供了进入框架的机制,我们将Sunra文件夹放在“安装路径-->ThinkPHP->Library->Vendor”目录中,结构如下图所示,

工程代码如下

class IndexController extends Controller {
public function index(){
}
public function dom()
{
Vendor('Sunra.PhpSimple.HtmlDomParser');
$url = "http://www.81.cn";
//$dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html( $url );
$dom =file_get_html( $url );
$u = $dom->find("#JMYWYL dt",0);
$title = $u ->find('a',0);
echo $title->innertext;
}
}

附录

php composer.phar install,出现下列错误,

SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

解决办法,

(1)wget http://curl.haxx.se/ca/cacert.pem

(2)修改php.ini,添加

openssl.cafile="/opt/lampp/cacert.pem"

PHP爬虫(2)DOM处理的更多相关文章

  1. 获取特定html源码 富文本编辑器 爬虫生成 dom

    python beautifulsoup获取特定html源码 - 吴悟无 - 博客园 https://www.cnblogs.com/vickey-wu/p/6843411.html PyQuery库 ...

  2. 机器学习 Top 20 Python 开源项目

    转自:http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652565022&idx=1&sn=9aa035097120 ...

  3. 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】

    使用VB6创建和访问Dom树 关键字:VB,DOM,HTML,爬虫,IHTMLDocument 我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象. 但是,有这样一种情形,却让我 ...

  4. PHP爬虫(3)PHP DOM开源代码里的大坑和字符编码

    一.开源代码的问题 在PHP爬虫(2)中介绍了开源工程Sunra.PhpSimple.HtmlDomParser.在实际工作中发现一个问题,例如http://www.163.com的网页数据怎么也抓取 ...

  5. php爬虫学习笔记1 PHP Simple HTML DOM Parser

    常用爬虫. 0. Snoopy是什么? (下载snoopy)   Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务.   Snoopy的一些特点:   * ...

  6. VBA分别使用MSXML的DOM属性和XPATH进行网页爬虫

    本文要重点介绍的是VBA中的XmlHttp对象(MSXML2.XMLHTTP或MSXML.XMLHTTP),它可以向http服务器发送请求并使用微软XML文档对象模型Microsoft XML Doc ...

  7. 关于爬虫的日常复习(7)—— DOM操作及selenium库

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. 基于Node.js实现一个小小的爬虫

    以前一直听说有爬虫这种东西,稍微看了看资料,貌似不是太复杂. 正好了解过node.js,那就基于它来个简单的爬虫. 1.本次爬虫目标: 从拉钩招聘网站中找出“前端开发”这一类岗位的信息,并作相应页面分 ...

随机推荐

  1. 关于Java深clone 的例子学习

    之前http://www.cnblogs.com/lhppom/p/4857702.html里有提到关于Java的深克隆的学习,深浅区别就是在于仅复制对象引用和复制对象引用所指向的对象,最近在看< ...

  2. SmartUpload实现文件上传时file和表单文本同时提交的问题

    JSP页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...

  3. kali linux 、 windows、ubuntu三系统的引导问题

    '小飞机'是一个学生,所以接触的东西,虽广泛,但并不精通,在此利用随笔,记录自己的一些学习过程,以及自己的想法,既可以有时间自己复习,也可以顺便帮助别人. 近期由于同学的引诱以及男生天生对于破解的好奇 ...

  4. pragma

    在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个 编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  5. 今个忽然晓得,原来radio不是普通去获取值的!

    今日,写js校验.对于不太会的,总是陌生的.碰见radio的取值,习惯的用document.getElementsByName("")[0].value去获取值,却忘记了radio ...

  6. DNS配置

    配置永久IP: cd  /etc/sysconfig/network-scripts/ 主DNS服务器配置: 由于caching-nameserver软件包提供了各种配置文件的模板,大大降低了BIND ...

  7. #笔记# 移动前端开发之viewport

    一般移动设备的浏览器都默认设置了一个 viewport ,并初始定义一个虚拟的layout viewport(布局视口),用于解决早期的页面在手机上显示的问题.下面我们来认识几个与 viewport  ...

  8. hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了

    hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了 例如session.save(user);user.setAge(20); 原因: hibernate对象的三种 ...

  9. 一些IOS开发中的小技巧

    1.打包后提交报错误 错误信息:ERROR ITMS-90035: "Invalid Signature. Code object is not signed at all. The bin ...

  10. ubuntu安装octave的小坑

    出现了以下情况: After this operation, 163 MB of additional disk space will be used.Do you want to continue? ...