摘要: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. vim c++补全

    弄了个vim对c++的补全,主要参考自: http://vim.wikia.com/wiki/C%2B%2B_code_completion   首先确定vim编辑.cc或者.cpp文件时当前自动补全 ...

  2. JS-Number

    Number 是对原始数据的封装 语法: var myNum=new Number(value);//返回一个新创建的 Number 对象 var myNum=Number(value);//把自己的 ...

  3. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  4. 4580: [Usaco2016 Open]248

    Description Bessie likes downloading games to play on her cell phone, even though she does find the ...

  5. Java中实现PHP中的urlencode与rawurlencode

    php手册中对urlencode这样说明 在java中 URLEncoder做了这样注释 也就是说java中对星号"*"是不进行编码的 也就是说URLEncoder之后还是&quo ...

  6. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  7. 使用DataOutputStream写入int类型数字不能显示

    前段时间做Android系统项目需要使用DataOutputStream数据流向文件里写入数据,写入的有String类型和int类型.写入之后在代码中使用DataInputStream读出是没有问题的 ...

  8. XCode一直显示"scanning for working copies"的解决办法

    一个SVN上的项目,在本地重新CheckOut打开后,一直提示"scanning for working copies"且不能使用SVN的更新.提交等功能,当时想着晾它一晚上,看能 ...

  9. Java学习日记之 Java-其他类型

    OK , 就绪, 第一篇博客开撸 ~ 先听了毕姥爷激情澎湃的其他类型 ,从这里开始入手吧 : (一)System类  System类代表系统类,系统的属性和方法都放在该类.System类是一个fina ...

  10. C# XMAL与WPF

    通过老师上课的解释和我下课后的网上查询,我了解到了一些关于这三者的关系.XAML是.NET体系开发程序或者网页时前台编程的一种布局方式或者说开发语言,可以比较自由的用标签的方式进行布局,借鉴了HTML ...