2011-12-21 3 views
1

В настоящее время я выполняю работу для клиента, который, случается, является группой видеоигр для игры World of Warcraft.HTML Data Scraping (я думаю)

Они хотят показать свой рейтинг на своем веб-сайте.

Рейтинги показаны here.

Они хотели бы иметь номер для «Oceanic», а число для «US» отображается на их веб-сайте.

Может ли кто-нибудь показать мне способ, которым эти номера могут автоматически обновляться на веб-сайте, если они меняются?

Спасибо!

+0

У вас есть доступ к серверным скриптам, например, PHP? – FakeRainBrigand

+0

Да, у меня есть доступ ко всем файлам/базам данных и т. Д. –

+0

Вы не можете сделать это с помощью jQuery, так как он требует отправки запроса через домены. Вам нужен PHP или серверный язык. – Blender

ответ

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

Спасибо, много человек, ты потрясающий :)! Теперь мне просто нужно выяснить, как я могу применить div или что-то подобное этому, чтобы позволить стиль. Любые идеи? –

0

Из-за перекрестной защиты домена вы не можете сделать это с помощью javascript, вам придется получить информацию на стороне вашего сервера, если у вас есть к нему доступ.

+0

У меня есть доступ к моему серверу, или вы имеете в виду со своего сервера? –

+0

Нет на вашем серверном конце кода на вашем сервере. I belive john показал пример на php ниже –

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

Я мог бы фактически упростить первый шаблон, а не то, что он изменит результаты. '/

world: \ D + (\ d +) /' работает одинаково. – FakeRainBrigand

+0

Использование регулярного выражения может быть больно отлаживать, особенно через 6 месяцев, если они меняют макет. Мне легче отлаживать строку простых вызовов функций. –

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";