2011-02-05 72 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。

編輯:看起來太晚了。