0

所以正如标题所说,我想获得这个网站的价值:Xtremetop100 Conquer-Online

我的服务器名为 Zath-Co,现在我们排在第 11 位。我想要的是一个脚本会告诉我我们是哪个等级,我们有多少进出。唯一的问题是我们在列表中上下浮动,所以我想要一个脚本来检查名称而不是排名,但我无法摆脱它。我试过这个脚本

  <?php $lines = file('http://xtremetop100.com/conquer-online');
  while ($line = array_shift($lines)) {
  if (strpos($line, 'Zath-Co') !== false) break; }
  print_r(explode(" ", $line)); ?>

但它只显示我的服务器的名称和描述。我怎样才能让它按我的意愿工作,或者我必须使用一些真正不同的东西。(如果是,那么使用什么,一个例子会很棒。)

4

2 回答 2

0

我建议使用 SimpleXML 和 XPath。这是工作示例:

$html = file_get_contents('http://xtremetop100.com/conquer-online');

// suppress invalid markup warnings
libxml_use_internal_errors(true);

// Create SimpleXML object
$doc = new DOMDocument();
$doc->strictErrorChecking = false;
$doc->loadHTML($html);
$xml = simplexml_import_dom($doc);

$xpath = '//span[@class="hd1" and ./a[contains(., "Zath-Co")]]/ancestor::tr/td[@class="number" or @class="stats1" or @class="stats"]';
$anchor = $xml->xpath($xpath);

// Clear invalid markup error buffer
libxml_clear_errors();

$rank = (string)$anchor[0]->b;
$in   = (string)$anchor[1]->span;
$out  = (string)$anchor[2]->span;

// Clear invalid markup error buffer
libxml_clear_errors();
于 2012-04-07T12:15:00.667 回答
0

正如您自己尝试的那样,它也可以使用 file() 函数修复。您只需要查找源代码并找到您的“部分”的起始行。我发现(在源代码中),您需要 7 行来获取排名、描述和输入/输出数据。这是一个经过测试的示例:

<?php 

$lines = file('http://xtremetop100.com/conquer-online');
$CountLines = sizeof( $lines);
$arrHtml = array();
for( $i = 0; $i < $CountLines; $i++) {
    if( strpos( $lines[$i], '/sitedetails-1132314895')) {
        //The seven lines taken here under is your section at the site
        $arrHtml[] = $lines[$i++];
        $arrHtml[] = $lines[$i++]; 
        $arrHtml[] = $lines[$i++];
        $arrHtml[] = $lines[$i++];
        $arrHtml[] = $lines[$i++];
        $arrHtml[] = $lines[$i++];
        $arrHtml[] = $lines[$i++];
        break;
    }
}

//We simply strip all tags, so you just got the content.
$arrHtml = array_map("strip_tags", $arrHtml);

//Here we echo the data
echo implode('<br>',$arrHtml);

?>

您可以通过循环从 $arrHtml 中取出每个元素来自己修复布局。

于 2012-04-07T12:27:51.933 回答