【问题标题】:Php parse html dom and target elementsphp解析html dom和目标元素
【发布时间】:2016-05-27 05:29:10
【问题描述】:

我有一个游戏服务器,我想构建一个简单的 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>

幸运的是,有一堆 row-tightboxbox-content 类名:)

所以我想获取上面显示 0 / 64box-content 部分之一的值

我的 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 中:)

谢谢

【问题讨论】:

    标签: php html parsing web screen-scraping


    【解决方案1】:

    Simple html DOM manual,我看不出它支持nth-child,但它支持其他语法:$html-&gt;find('&lt;element&gt;', &lt;nth-child&gt;)。所以你的代码应该是这样的:

    $player = $html-&gt;find('div[id=server-page-info]')-&gt;find('.row-tight',1)-&gt;find('.box',0);

    我建议使用# 代替属性:

    $player = $html-&gt;find('#server-page-info')-&gt;find('.row-tight',1)-&gt;find('.box',0);

    更新

    如果你想做下一个find,你只需要选择一个带有find('&lt;element&gt;', &lt;nth-child&gt;)的元素在你的情况下:$player = $html-&gt;find('#server-page-info',0)-&gt;find('.row-tight',1)-&gt;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;
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多