当前位置: 首页 > 知识库问答 >
问题:

Scrape page然后计算某个类的div数并回显该数

鄢英毅
2023-03-14

大家好,这里似乎碰到了一堵墙,我正在尝试创建一个简单的脚本,通过抓取页面,用类“.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);

?>

共有3个答案

谢高峯
2023-03-14

您可能希望使用QueryPath:

<?php

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

当我解析超文本标记语言时,我喜欢使用XPath。

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

或者,为什么不使用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;
 类似资料:
  • 我有一个包含所有预订的预订数据库,现在我想限制日期,如果1个日期重复自己一定的次数(为了测试目的,5)。我做了一个查询,选择所有的日期,但认为它只是计算所有的日期,而不是具有相同值的日期。我怎么让它做到这一点?

  • 问题内容: 我想结合两个查询 然后计算百分比(将第二个查询除以第一个查询)。我想在一个查询中实现这一目标。到目前为止我尝试过的是: 我得到的是: 我想要的是: 问题答案: 这应该给您您想要的: 编辑:没注意到这是为Access。我不知道Access中是否可用,因此您可能需要使用一个等效函数来确保整数不会简单地产生1或0。Access可能会自动将除法转换为小数,但在SQL Server则不然。

  • 这是我之前问题的后续:如何提取每个组的前n行并使用该子集计算函数? 另一篇相关文章:如何提取每组的前n行? 我有以下数据: 我想在特定索引处按组对这些数据应用一个函数,其中函数输出取决于子集化的数据帧。然后,我想用不同的分组变量对结果data.table进行分组,并取一个简单的平均值。 我是否希望首先在子集化的行上按组1计算我的函数,r bind列出结果,然后按组2计算平均值? 还是我想先rbin

  • 有没有一种方法可以简化或使R代码更优雅?

  • 我正在学习爪哇,我正在通过德特尔 创建一个具有长度和宽度属性的类Rectangle,每个属性默认为1。提供计算矩形周长和面积的方法。对长度和宽度都使用set和get方法。set方法将验证长度和宽度都是大于0.0小于20.0的浮点数。编写一个程序来测试类Rectangle。 这是我创建的类: 下面是测试类或驱动类: 当我运行测试类(在IDE中)时,显示了以下警告: "不兼容的类型:从double到f

  • 我必须创建带有字符串和int字段的类。没有参数的构造函数必须初始化:空字符串和int的0值。方法应允许程序向字符串(name)添加新字符方法应返回此字符串,而方法必须显示此字符的数量。我试过这样的方法: 但是真的不知道如何编写可以向String添加一个字符的方法(有错误)以及如何编写可以使用这些方法来显示它所有工作的程序。谢谢