2011-02-05 59 views
1

我想从网站上刮取17个值。从网页刮取数字值?

这与数据页面的网址:http://www.bungie.net/stats/reach/online.aspx

在页面的左下方有一个标题为“ONLINE PLAYLIST” 我想凑在各列表项的玩家数量无序列表包含这些信息。该号码只需要数字即没有逗号。

+0

你只想要数字而没有名字?或者你需要名称与他们一起去? – 2011-02-05 07:14:51

+0

你卡在哪里? – miku 2011-02-05 07:15:16

回答

2
$c = curl_init(); 
curl_setopt_array($c, array(
    CURLOPT_URL => 'http://www.bungie.net/stats/reach/online.aspx', 
    CURLOPT_RETURNTRANSFER => true, 
    )); 
$r = curl_exec($c); 
curl_close($c); 

preg_match_all('|([^<>]+)</a> </h4>\s*([0-9,]+) Players|s', $r, $m); 
$teams = array_combine($m[1], $m[2]); 
foreach ($teams as &$v) $v = str_replace(',','',$v); 
echo '<pre>'.print_r($teams,1).'</pre>'; 

输出的时刻:

Array 
(
    [NOBLE MAP PACK] => 997 
    [RUMBLE PIT] => 4117 
    [LIVING DEAD] => 6638 
    [TEAM SLAYER] => 7730 
    [MLG] => 586 
    [TEAM SWAT] => 6358 
    [TEAM SNIPERS] => 2145 
    [TEAM OBJECTIVE] => 758 
    [MULTI TEAM] => 1707 
    [BIG TEAM BATTLE] => 5706 
    [INVASION] => 2881 
    [FIREFIGHT] => 2780 
    [SCORE ATTACK] => 1121 
    [CO-OP CAMPAIGN] => 695 
    [TEAM ARENA] => 393 
    [DOUBLES ARENA] => 680 
    [FFA ARENA] => 120 
) 

编辑:固定名称捕获组,使 “CO-OP” 将被拍摄的,而不是仅仅 “OP”。

+0

是的,非常感谢你有什么方法可以每隔15分钟运行一次这个脚本而不使用浏览器? – AndrewFerrara 2011-02-05 07:30:55

1

在我看来,这里有一点正则表达式就是你需要的。我最近在PERL中做了这样的事情,这不是非常棘手,并且在线上有很多有用的线程和教程。

检查页面,它看起来像每个列表项目被分配一个名为“glowBox”的类。我会尝试获取页面的全文/源代码,然后进行过滤,以便只有以该课程开头的章节。或者,您可以使用前视或后视来检查数字是前后还是“”。一旦您缩小了范围,您需要一个捕获组来提取数字,以便稍后使用。 PERL,捕获的字符串会自动分配给变量$ 1,$ 2,$ 3 ...等。如果您只是循环执行正则表达式的无序列表的每一行,则只需要$ 1即可捕获该数字。捕获组可能如下所示:(\ d +)

括号使它成为一个捕获组,\ d它只会匹配数字字符,而+意味着为了捕获任何东西,\ d必须是至少匹配一次,不知道你的要求是什么,但是如果你需要名字和数字,PERL mak可以很轻松地为页面查找必要的数据,并将其变为带键/值对的散列。

绝对检出http://www.regexr.com,这是一种类似于CSS禅宗花园的正则表达式。您可以将整个页面源代码粘贴到其中,并使用正则表达式进行播放,直到找到您想要的内容,并且只显示您想要的内容。有关正则表达式怪异语法的更多信息和解释,请启动here,显然,请使用google。

编辑:看起来太晚了。