抓取页面然后计算某个类的 div 数并回显该数字

Posted

技术标签:

【中文标题】抓取页面然后计算某个类的 div 数并回显该数字【英文标题】:Scrape page then count the number of divs of a certain class and echo that number 【发布时间】:2016-04-14 23:46:02 【问题描述】:

大家好,似乎在这里碰壁了,我正在尝试创建一个简单的脚本,通过抓取页面来计算当前运行此地图的服务器数量,计算类“.row ark_srv1”的 div,然后回显那个号码。

问题:脚本返回 0

到目前为止,这是我设法拍到的:

<?php

$html_string = file_get_contents('toparkservers.com/1/search/?term=Umassoura'); 

function getElementsByClassName($elements, $className) 
    $matches = array();
    foreach($elements as $element) 
        if (!$element->hasAttribute('class')) 
            continue;
        
        $classes = preg_split('/\s+/', $element->getAttribute('class'));
        if ( ! in_array($className, $classes)) 
            continue;
        
        $matches[] = $element;
    
    return $matches;


$dom = new DOMDocument;
$dom->loadHTML($html_string);
$divs = getElementsByClassName($dom->getElementsByTagName('.row ark_srv1'), '.row ark_srv1');
$length = $divs->length;

echo count($divs);

?>

【问题讨论】:

$dom-&gt;getElementsByTagName('.row ark_srv1') - 这不应该是getElementsByClassName('.row ark_srv1')吗? .row 是一个班级,是吗? div 会是“标签名称”吗? 【参考方案1】:

作为替代方案,为什么不使用xpath 按类名获取元素:

$html_string = file_get_contents('http://toparkservers.com/1/search/?term=Umassoura'); 
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html_string);
libxml_clear_errors();
$xpath = new DOMXpath($dom);
$class = 'row ark_srv1';
$elements = $xpath->query("//*[contains(@class, '$class')]");
echo 'elements found: ', $elements->length;

【讨论】:

好多了。我正在制定相同的示例,但陷入了无效的 HTML :) @RobbieAverill 打败了你:p【参考方案2】:

当我解析 HTML 时,我喜欢使用 XPath.

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$divs= $xpath->query("//div[@class='className']");
echo count($divs);

【讨论】:

【参考方案3】:

您可能想使用QueryPath:

<?php

print html5qp('http://toparkservers.com/1/search/?term=Umassoura', '.row.ark_srv1')->length;
// 9

【讨论】:

以上是关于抓取页面然后计算某个类的 div 数并回显该数字的主要内容,如果未能解决你的问题,请参考以下文章

php轮询是不是需要

如何用input标签上传多个图片并回显

vue+Springboot上传oss阿里云并回显到前端页面

vue+Springboot上传oss阿里云并回显到前端页面

vue+Springboot上传oss阿里云并回显到前端页面

实现将a页面的数据传入到b页面中并回显在b页面