Php 解析 html dom 和目标元素
Php parse html dom and target elements
我有一个游戏服务器,我想构建一个简单的 php 来吸引我的服务器玩家,因为没有 API 可以使用
经过一番搜索,我找到了这个 Simple php DOM Parser 这非常适合我想做的事情:)
假设我的服务器 link 包含此结构
<div id="server-page-info">
<div class="row-tight">
<div class="box span1">
<header>
<h1>Players</h1>
</header>
</div>
<div class="box span1">
<header>
<h1>Ping</h1>
</header>
</div>
</div>
<div class="row-tight">
<div class="box span1">
<section class="box-content">
<h5>
0 / 64
</h5>
</section>
</div>
<div class="box span1">
<section class="box-content">
<h5>
-ms
</h5>
</section>
</div>
</div>
</div>
幸运的我,有一堆 row-tight 和 box 和 box-content class 个名字 :)
所以我想获取其中一个 box-content 部分的值,该部分显示 0 / 64 以上
我的php代码
抱歉我是 PHP 的新手。您还可以看到我是如何定位元素的,但它不起作用,我什么也没得到 :)
require 'simple_html_dom.php';
$url = '';
$html = file_get_html($url);
$player = $html->find('div[id=server-page-info] .row-tight:nth-child(2) .box:first-child');
foreach( $player as $players ){
echo $players->plaintext;
}
我还要补充一个问题:)
现在,当我将服务器玩家值作为明文获取时,我想将其包装在 div :)
谢谢
来自 Simple html DOM manual 我没有看到它支持 nth-child
,但它支持其他语法:$html->find('<element>', <nth-child>)
。因此您的代码应如下所示:
$player = $html->find('div[id=server-page-info]')->find('.row-tight',1)->find('.box',0);
我建议使用 #
作为 id 而不是属性:
$player = $html->find('#server-page-info')->find('.row-tight',1)->find('.box',0);
更新
如果你想做下一步 find
你总是需要 select 只有一个元素 find('<element>', <nth-child>)
在你的情况下: $player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);
。
我测试了下面的一块,它显示 0 / 64。
require 'simple_html_dom.php';
$html = str_get_html('<div id="server-page-info">
<div class="row-tight">
<div class="box span1">
<header>
<h1>Players</h1>
</header>
</div>
<div class="box span1">
<header>
<h1>Ping</h1>
</header>
</div>
</div>
<div class="row-tight">
<div class="box span1">
<section class="box-content">
<h5>
0 / 64
</h5>
</section>
</div>
<div class="box span1">
<section class="box-content">
<h5>
-ms
</h5>
</section>
</div>
</div>
</div>');
$player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);
echo $player->plaintext;
我有一个游戏服务器,我想构建一个简单的 php 来吸引我的服务器玩家,因为没有 API 可以使用
经过一番搜索,我找到了这个 Simple php DOM Parser 这非常适合我想做的事情:)
假设我的服务器 link 包含此结构
<div id="server-page-info">
<div class="row-tight">
<div class="box span1">
<header>
<h1>Players</h1>
</header>
</div>
<div class="box span1">
<header>
<h1>Ping</h1>
</header>
</div>
</div>
<div class="row-tight">
<div class="box span1">
<section class="box-content">
<h5>
0 / 64
</h5>
</section>
</div>
<div class="box span1">
<section class="box-content">
<h5>
-ms
</h5>
</section>
</div>
</div>
</div>
幸运的我,有一堆 row-tight 和 box 和 box-content class 个名字 :)
所以我想获取其中一个 box-content 部分的值,该部分显示 0 / 64 以上
我的php代码
抱歉我是 PHP 的新手。您还可以看到我是如何定位元素的,但它不起作用,我什么也没得到 :)
require 'simple_html_dom.php';
$url = '';
$html = file_get_html($url);
$player = $html->find('div[id=server-page-info] .row-tight:nth-child(2) .box:first-child');
foreach( $player as $players ){
echo $players->plaintext;
}
我还要补充一个问题:) 现在,当我将服务器玩家值作为明文获取时,我想将其包装在 div :)
谢谢
来自 Simple html DOM manual 我没有看到它支持 nth-child
,但它支持其他语法:$html->find('<element>', <nth-child>)
。因此您的代码应如下所示:
$player = $html->find('div[id=server-page-info]')->find('.row-tight',1)->find('.box',0);
我建议使用 #
作为 id 而不是属性:
$player = $html->find('#server-page-info')->find('.row-tight',1)->find('.box',0);
更新
如果你想做下一步 find
你总是需要 select 只有一个元素 find('<element>', <nth-child>)
在你的情况下: $player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);
。
我测试了下面的一块,它显示 0 / 64。
require 'simple_html_dom.php';
$html = str_get_html('<div id="server-page-info">
<div class="row-tight">
<div class="box span1">
<header>
<h1>Players</h1>
</header>
</div>
<div class="box span1">
<header>
<h1>Ping</h1>
</header>
</div>
</div>
<div class="row-tight">
<div class="box span1">
<section class="box-content">
<h5>
0 / 64
</h5>
</section>
</div>
<div class="box span1">
<section class="box-content">
<h5>
-ms
</h5>
</section>
</div>
</div>
</div>');
$player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);
echo $player->plaintext;