目录
安装与使用
查找 HTML 元素
一个例子
操作元素属性
添加、删除和替换元素
最终想法
首页 web前端 html教程 使用DiDOM解析HTML的PHP代码

使用DiDOM解析HTML的PHP代码

Sep 08, 2023 am 11:41 AM
php编程 解析html didom

使用DiDOM解析HTML的PHP代码

开发人员时不时地需要抓取网页以从网站获取一些信息。例如,假设您正在开发一个个人项目,您必须从维基百科获取有关不同国家首都的地理信息。手动输入会花费很多时间。不过,您可以借助 PHP 抓取维基百科页面,非常快速地完成此操作。您还可以自动解析 HTML 以获取特定信息,而无需手动浏览整个标记。

在本教程中,我们将了解一种名为 DiDOM 的快速且易于使用的 HTML 解析器。我们将从安装过程开始,然后学习如何使用不同类型的选择器(如标签、类等)从网页上的不同元素中提取信息。

安装与使用

您可以通过运行以下命令轻松在项目目录中安装 DiDOM:

composer require imangazaliev/didom
登录后复制

运行上述命令后,您将能够从字符串、本地文件或网页加载 HTML。这是一个例子:

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document($washington_dc_html_string);

$document = new Document('washington_dc.html', true);

$url = 'https://en.wikipedia.org/wiki/Washington,_D.C.';
$document = new Document($url, true);
登录后复制

当您决定从文档中解析 HTML 时,它可能已经被加载并存储在变量中。在这种情况下,您只需将该变量传递给 Document(),DiDOM 将准备要解析的字符串。

如果必须从文件或 URL 加载 HTML,您可以将其作为第一个参数传递给 Document() 并将第二个参数设置为 true 并将第二个参数设置为 true

您还可以使用不带任何参数的 new Document() 创建一个新的 Document 对象。在这种情况下,您可以调用方法 loadHtml() 从字符串加载 HTML,并调用 loadHtmlFile() 从文件或网页加载 HTML。< /p>

查找 HTML 元素

从元素获取 HTML 或文本之前要做的第一件事是找到元素本身。最简单的方法是使用 find() 方法并将所需元素的 CSS 选择器作为第一个参数传递。

您还可以将元素的 XPath 作为 find() 方法的第一个参数传递。但是,这需要您传递 Query::TYPE_XPATH 方法的第一个参数传递。但是,这需要您传递 Query::TYPE_XPATH 作为第二个参数。

如果您只想使用 XPath 值来查找 HTML 元素,则可以简单地使用 xpath() 方法,而不是传递 Query::TYPE_XPATH每次作为 xpath() 方法,而不是传递 Query::TYPE_XPATH每次作为 find() 的第二个参数。

如果 DiDOM 可以找到与传递的 CSS 选择器或 XPATH 表达式匹配的元素,它将返回 DiDomElement 实例的数组。如果没有找到这样的元素,它将返回一个空数组。

由于这些方法返回一个数组,因此您可以使用 find()[n-1] 直接访问第 n 个匹配元素。

一个例子

在下面的示例中,我们将从有关华盛顿特区的维基百科文章中的所有一级和二级标题中获取内部 HTML

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$main_heading = $document->find('h1.firstHeading')[0];
echo $main_heading->html();

$sub_headings = $document->find('h2');

foreach($sub_headings as $sub_heading) {
    if($sub_heading->text() !== 'See also') {
        echo $sub_heading->html();
    } else {
        break;
    }
}
登录后复制

我们首先通过传递有关华盛顿特区的维基百科文章的 URL 来创建一个新的 Document 对象。之后,我们使用 find() 方法获取主标题元素并将其存储在名为 $main_heading 的变量内。我们现在可以在此元素上调用不同的方法,例如 text()innerHtml()html() 方法获取主标题元素并将其存储在名为 $main_heading 的变量内。我们现在可以在此元素上调用不同的方法,例如

innerHtml()html()

html() 方法即可返回整个标题元素的 HTML。同样,我们可以使用 innerHtml() 方法获取特定元素内的 HTML。有时,您会对元素的纯文本内容而不是其 HTML 更感兴趣。在这种情况下,您只需使用 text()对于主标题,我们只需调用

方法即可完成。

二级标题将我们的维基百科页面划分为定义明确的部分。但是,您可能希望删除其中一些副标题,例如“另请参阅”、“注释”等。

text()一种方法是循环遍历所有二级标题并检查

方法返回的值。如果返回的标题文本是“另请参阅”,我们将跳出循环。

$document->find('h2')[3]$document- 可以直接到达第四或第六级二级标题>find('h2')[5]使用

分别。

上下遍历 DOM

一旦您可以访问特定元素,该库就可以让您上下遍历 DOM 树以轻松访问其他元素。

parent() 方法转到 HTML 元素的父元素。同样,您可以使用 nextSibling()previousSibling()您可以使用

方法获取元素的下一个或上一个同级元素。🎜

还有很多方法可用于访问 DOM 元素的子元素。例如,您可以使用 child(n) 方法获取特定的子元素。同样,您可以使用 firstChild()lastChild() 方法访问特定元素的第一个或最后一个子元素。您可以使用 children() 方法循环遍历特定 DOM 元素的所有子元素。

一旦到达特定元素,您将能够使用 html()innerHtml()text() 方法。

在下面的示例中,我们从二级标题元素开始,并继续检查下一个同级元素是否包含一些文本。一旦我们找到带有一些文本的同级元素,我们就会将其输出到浏览器。

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$sub_headings = $document->find('h2');

for($i = 1; $i < count($sub_headings); $i++) {
    if($sub_headings[$i]->text() !== 'See also') {
        $next_sibling = $sub_headings[$i]->nextSibling();
        while(!$next_elem->html()) {
            $next_sibling = $next_sibling->nextSibling();
        }

        echo $next_elem->html()."<br>";
    } else {
        break;
    }
}
登录后复制

您可以使用类似的技术循环遍历所有同级元素,并且仅在文本包含特定字符串或同级元素是段落标记等时输出文本。一旦您了解了基础知识,找到正确的信息就是简单的。

操作元素属性

在某些情况下,获取或设置不同元素的属性值的能力非常有用。例如,我们可以使用 $image_elem->attr( 'src').以类似的方式,您可以获得文档中所有 a 标记的 href 属性的值。

可以通过三种方法获取 HTML 元素的给定属性的值。您可以使用 getAttribute('attrName') 方法并将您感兴趣的属性名称作为参数传递。您还可以使用 attr('attrName') 方法,其工作方式与 getAttribute() 类似。最后,该库还允许您使用 $elem->attrName 直接获取属性值。这意味着您可以使用 $imageElem->src 直接获取图像元素的 src 属性值。

require_once('vendor/autoload.php');

use DiDom\Document;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

$images = $document->find('img');

foreach($images as $image) {
    echo $image->src."<br>";
}
登录后复制

一旦您有权访问src属性,您就可以编写代码来自动下载所有图像文件。这样,您将能够节省大量时间。

您还可以使用三种不同的技术来设置给定属性的值。首先,您可以使用 setAttribute('attrName', 'attrValue') 方法来设置属性值。您还可以使用 attr('attrName', 'attrValue') 方法来设置属性值。最后,您可以使用 $Elem->attrName = 'attrValue' 设置给定元素的属性值。

添加、删除和替换元素

您还可以使用库提供的不同方法对加载的 HTML 文档进行更改。例如,您可以使用 appendChild()replace()从 DOM 树添加、替换或删除元素">删除() 方法。

该库还允许您创建自己的 HTML 元素,以便将它们附加到原始 HTML 文档中。您可以使用 new Element('tagName', 'tagContent') 创建新的 Element 对象。

请记住,如果您的程序在实例化之前不包含行 use DiDom\Element ,您将收到未捕获错误:未找到“Element”类错误元素对象。

获得该元素后,您可以使用 appendChild() 方法将其附加到 DOM 中的其他元素,也可以使用 replace( ) 方法使用新实例化的元素来替换文档中某些旧的 HTML 元素。下面的例子应该有助于进一步阐明这个概念。

require_once('vendor/autoload.php');

use DiDom\Document;
use DiDom\Element;

$document = new Document('https://en.wikipedia.org/wiki/Washington,_D.C.', true);

// This will result in error.
echo $document->find('h2.test-heading')[0]->html()."\n";

$test_heading = new Element('h2', 'This is test heading.');
$test_heading->class = 'test-heading';

$document->find('h1')[0]->replace($test_heading);

echo $document->find('h2.test-heading')[0]->html()."\n";
登录后复制

最初,我们的文档中没有 test-heading 类的 h2 元素。因此,如果我们尝试访问这样的元素,我们将不断收到错误。

验证不存在这样的元素后,我们创建一个新的h2元素,并将其class属性的值更改为test-heading >.

之后,我们将文档中的第一个 h1 元素替换为新创建的 h2 元素。再次在我们的文档中使用 find() 方法查找带有 test-heading 类的 h2 标题,现在将返回一个元素。

最终想法

本教程介绍了 PHP DiDOM HTML 解析器的基础知识。我们从安装开始,然后学习如何从字符串、文件或 URL 加载 HTML。之后,我们讨论了如何根据 CSS 选择器或 XPath 查找特定元素。我们还学习了如何获取元素的兄弟元素、父元素或子元素。其余部分介绍了如何操作特定元素的属性或在 HTML 文档中添加、删除和替换元素。

如果您希望我在教程中澄清任何内容,请随时在评论中告诉我。

以上是使用DiDOM解析HTML的PHP代码的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
PHP将行格式化为 CSV 并写入文件指针 PHP将行格式化为 CSV 并写入文件指针 Mar 22, 2024 am 09:00 AM

这篇文章将为大家详细讲解有关PHP将行格式化为CSV并写入文件指针,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。将行格式化为CSV并写入文件指针步骤1:打开文件指针$file=fopen("path/to/file.csv","w");步骤2:将行转换为CSV字符串使用fputcsv()函数将行转换为CSV字符串。该函数接受以下参数:$file:文件指针$fields:作为数组的CSV字段$delimiter:字段分隔符(可选)$enclosure:字段引号(

PHP建立一个具有唯一文件名的文件 PHP建立一个具有唯一文件名的文件 Mar 21, 2024 am 11:22 AM

这篇文章将为大家详细讲解有关PHP建立一个具有唯一文件名的文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中创建唯一文件名的文件简介在php中创建具有唯一文件名的文件对于组织和管理文件系统至关重要。唯一文件名确保不会覆盖现有文件,并便于查找和检索特定文件。本指南将介绍在PHP中生成唯一文件名的几种方法。方法1:使用uniqid()函数uniqid()函数生成一个基于当前时间和微秒的唯一字符串。此字符串可以作为文件名的基础。

PHP改变当前的 umask PHP改变当前的 umask Mar 22, 2024 am 08:41 AM

这篇文章将为大家详细讲解有关PHP改变当前的umask,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP更改当前的umask概述umask是一个用于设置新创建的文件和目录的默认文件权限的php函数。它接受一个参数,这是一个八进制数字,表示要阻止的权限。例如,要阻止对新创建的文件进行写入权限,可以使用002。更改umask的方法有两种方法可以更改PHP中的当前umask:使用umask()函数:umask()函数直接更改当前umask。其语法为:intumas

PHP返回一个键值翻转后的数组 PHP返回一个键值翻转后的数组 Mar 21, 2024 pm 02:10 PM

这篇文章将为大家详细讲解有关PHP返回一个键值翻转后的数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP键值翻转数组键值翻转是一种对数组进行的操作,它将数组中的键和值进行交换,生成一个新的数组,其中原始键作为值,原始值作为键。实现方法在php中,可以通过以下方法对数组进行键值翻转:array_flip()函数:array_flip()函数专门用于键值翻转操作。它接收一个数组作为参数,并返回一个新的数组,其中键和值已交换。$original_array=[

PHP计算文件的 MD5 散列 PHP计算文件的 MD5 散列 Mar 21, 2024 pm 01:42 PM

这篇文章将为大家详细讲解有关PHP计算文件的MD5散列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP计算文件的MD5散列MD5(MessageDigest5)是一种单向加密算法,可将任意长度的消息转换为固定长度的128位哈希值。它广泛用于确保文件完整性、验证数据真实性和创建数字签名。在PHP中计算文件的MD5散列php提供了多种方法来计算文件的MD5散列:使用md5_file()函数md5_file()函数直接计算文件的MD5哈希值,返回一个32个字符的

PHP将文件截断到给定的长度 PHP将文件截断到给定的长度 Mar 21, 2024 am 11:42 AM

这篇文章将为大家详细讲解有关PHP将文件截断到给定的长度,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP文件截断简介php中的file_put_contents()函数可用于将文件截断到指定长度。截断是指删除文件末尾的部分内容,从而缩短文件长度。语法file_put_contents($filename,$data,SEEK_SET,$offset);$filename:要截断的文件路径。$data:要写入文件的空字符串。SEEK_SET:指定为文件开始处

PHP返回上一个 MySQL 操作中的错误信息的数字编码 PHP返回上一个 MySQL 操作中的错误信息的数字编码 Mar 22, 2024 pm 12:31 PM

这篇文章将为大家详细讲解有关PHP返回上一个Mysql操作中的错误信息的数字编码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用PHP返回MySQL错误信息数字编码引言在处理mysql查询时,可能会遇到错误。为了有效处理这些错误,了解错误信息数字编码至关重要。本文将指导您使用php获取Mysql错误信息数字编码。获取错误信息数字编码的方法1.mysqli_errno()mysqli_errno()函数返回当前MySQL连接的最近错误号码。语法如下:$erro

PHP判断某个数组中是否存在指定的key PHP判断某个数组中是否存在指定的key Mar 21, 2024 pm 09:21 PM

这篇文章将为大家详细讲解有关PHP判断某个数组中是否存在指定的key,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP判断某个数组中是否存在指定的key:在php中,判断某个数组中是否存在指定的key的方法有多种:1.使用isset()函数:isset($array["key"])该函数返回布尔值,如果指定的key存在,则返回true,否则返回false。2.使用array_key_exists()函数:array_key_exists("key",$arr

See all articles