我有一个游戏服务器,我想建立一个简单的PHP来获取我的服务器播放器因为没有API可供使用
所以经过一点点搜索后我发现了Simple php DOM Parser这非常适合我想做的事情:)
假设我的服务器链接包含此结构
<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>
幸运的是,有一堆行紧和框和盒内容类名:)
所以我想获得其中一个 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 :)时
谢谢
答案 0 :(得分:1)
从This page我看不到它支持nth-child
,但它支持其他语法:$html->find('<element>', <nth-child>)
。所以你的代码应该是这样的:
$player = $html->find('div[id=server-page-info]')->find('.row-tight',1)->find('.box',0);
我建议使用#
代替属性:
$player = $html->find('#server-page-info')->find('.row-tight',1)->find('.box',0);
<强>更新强>
如果您想要执行下一个find
,则需要始终只选择一个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;