我想从网站上刮取17个值。从网页刮取数字值?
这与数据页面的网址:http://www.bungie.net/stats/reach/online.aspx
在页面的左下方有一个标题为“ONLINE PLAYLIST” 我想凑在各列表项的玩家数量无序列表包含这些信息。该号码只需要数字即没有逗号。
我想从网站上刮取17个值。从网页刮取数字值?
这与数据页面的网址:http://www.bungie.net/stats/reach/online.aspx
在页面的左下方有一个标题为“ONLINE PLAYLIST” 我想凑在各列表项的玩家数量无序列表包含这些信息。该号码只需要数字即没有逗号。
$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”。
是的,非常感谢你有什么方法可以每隔15分钟运行一次这个脚本而不使用浏览器? – AndrewFerrara 2011-02-05 07:30:55
在我看来,这里有一点正则表达式就是你需要的。我最近在PERL中做了这样的事情,这不是非常棘手,并且在线上有很多有用的线程和教程。
检查页面,它看起来像每个列表项目被分配一个名为“glowBox”的类。我会尝试获取页面的全文/源代码,然后进行过滤,以便只有以该课程开头的章节。或者,您可以使用前视或后视来检查数字是前后还是“”。一旦您缩小了范围,您需要一个捕获组来提取数字,以便稍后使用。 PERL,捕获的字符串会自动分配给变量$ 1,$ 2,$ 3 ...等。如果您只是循环执行正则表达式的无序列表的每一行,则只需要$ 1即可捕获该数字。捕获组可能如下所示:(\ d +)
括号使它成为一个捕获组,\ d它只会匹配数字字符,而+意味着为了捕获任何东西,\ d必须是至少匹配一次,不知道你的要求是什么,但是如果你需要名字和数字,PERL mak可以很轻松地为页面查找必要的数据,并将其变为带键/值对的散列。
绝对检出http://www.regexr.com,这是一种类似于CSS禅宗花园的正则表达式。您可以将整个页面源代码粘贴到其中,并使用正则表达式进行播放,直到找到您想要的内容,并且只显示您想要的内容。有关正则表达式怪异语法的更多信息和解释,请启动here,显然,请使用google。
编辑:看起来太晚了。
你只想要数字而没有名字?或者你需要名称与他们一起去? – 2011-02-05 07:14:51
你卡在哪里? – miku 2011-02-05 07:15:16