2011-12-21 42 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";