2011-12-21 43 views
1

我目前正在爲客戶端做一些工作,這恰好是魔獸世界遊戲的視頻遊戲組。HTML Data Scraping(我認爲)

他們想在他們的網站上顯示他們的當前評分。

該評級顯示here

他們希望在他們的網站上顯示「Oceanic」號碼和「US」號碼。

有人能告訴我一種方法,我可以讓這些數字自動更新網站上,如果他們改變?

謝謝!

+0

您是否有權訪問服務器端腳本,例如PHP? – FakeRainBrigand 2011-12-21 18:55:48

+0

是的,我有權訪問所有文件/數據庫等。 – 2011-12-21 18:57:00

+0

你不能用jQuery做到這一點,因爲它需要跨域發送請求。您需要PHP或一種服務器端語言。 – Blender 2011-12-21 18:57:04

回答

2

您可以使用此代碼段來取消數據 - 假設PHP運行正常,因爲您正在運行wordpress。我會將這些值保存在數據庫/扁平線/緩存中。

<?php 

$data = file_get_contents('http://www.wowprogress.com/guild/us/caelestrasz/Crimson/rating.tier13_25'); 

$oceanic = explode('<dt>Oceanic: </dt>', $data); 
$oceanic = substr($oceanic[1], 4, strpos($oceanic[1], '</dd>') - 4); 

$us = explode('<dt>US: </dt>', $data); 
$us = substr($us[1], 4, strpos($us[1], '</dd>') - 4); 

echo 'Oceanic: ' . $oceanic . "<br />\n"; 
echo 'US: ' . $us . "<br />\n"; 
+1

Thankyou這麼多人,你真棒:)! 現在我只需要弄清楚如何應用div或類似的東西來允許造型。 任何想法? – 2011-12-21 19:12:47

0

由於跨域安全性,您無法使用javascript來做到這一點,如果您有權訪問它,您將必須獲取信息服務器端的信息。

+0

我可以訪問我的服務器,或者你的意思是從他們的服務器? – 2011-12-21 19:04:23

+0

不能從你的服務器後端代碼在你的服務器上我相信john已經在php下面顯示了一個例子 – 2011-12-21 19:05:35

0

這是RegEx的解決方案。

<?php 

$data = implode('', file('http://www.wowprogress.com/guild/us/caelestrasz/Crimson/rating.tier13_25')); 
$pat_world = '/<span class="rank blue">(\d+)<\/span>/'; 
$pat_us = '/<dt>US:\D+(\d+)/'; 

preg_match($pat_world, $data, $world); 
preg_match($pat_us, $data, $us); 

echo $world[1]; 
echo "\n\n"; 
echo $us[1]; 

我知道每個人都是反網絡搜刮的正則表達式,但我認爲它在這種簡單情況下工作得很好。

+0

我實際上可以簡化第一種模式,而不是它會改變結果。 '/

世界:\ D +(\ d +)/'的工作原理是一樣的。 – FakeRainBrigand 2011-12-21 19:16:26

+0

使用正則表達式可能是一個痛苦的調試,尤其是在6個月後,如果他們改變了佈局。我發現調試一串簡單的函數調用更容易。 – 2011-12-21 19:18:10

1

這很簡單。我更喜歡使用simplehtmldom,但您也可以使用內置的php dom解析方法。

require 'simple_html_dom.php'; 
$html = file_get_html('http://www.wowprogress.com/guild/us/caelestrasz/Crimson/rating.tier13_25'); 
$xxx = $html->find('div.guildStats dl dd'); 

foreach($xxx as $k) 
echo $k->plaintext."\n";