Соскребать цифры с веб-страницы? - PullRequest
1 голос
/ 05 февраля 2011

Я бы хотел почистить 17 значений с сайта.

Это URL страницы с данными: http://www.bungie.net/stats/reach/online.aspx

В левом нижнем углу страницы находится неупорядоченный список, озаглавленный «ОНЛАЙН ПЛЕЙЛИСТ» Я хочу собрать количество игроков в каждом элементе списка, который содержит такую ​​информацию. Номер должен состоять только из цифр, то есть без запятой.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2011
<code>$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).'
';

Вывод на данный момент:

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
)

Редактировать: Исправлена ​​группа захвата имен, так что теперь вместо «OP» будет записываться «CO-OP».

1 голос
/ 05 февраля 2011

Мне кажется, что здесь вам нужно немного регулярных выражений.Я недавно сделал что-то подобное в PERL, что было не очень сложно, а также было хорошо задокументировано в Интернете со многими полезными темами и учебными пособиями.

Осматривая страницу, похоже, что каждому элементу списка назначен класс с именем «glowBox».Я бы попытался получить полный текст / источник страницы, а затем отфильтровать, чтобы у вас были только разделы, начинающиеся с этого класса.В качестве альтернативы, вы можете использовать предпросмотр или просмотр за спиной, чтобы проверить, что перед номером стоит или следует «. После того, как вы его сузили, вам понадобится группа захвата, чтобы набрать номер как то, что вы сможете использовать позже.PERL, захваченные строки автоматически присваиваются переменным $ 1, $ 2, $ 3 ... и т. Д. Если вы просто просматриваете каждую строку неупорядоченного списка, выполняющего регулярное выражение, вам нужно только $ 1, чтобы захватить число.

Ваша группа захвата может выглядеть следующим образом: (\ d +)

Скобки обозначают группу захвата, \ d она будет соответствовать только цифрам, а знак + означает, что для захвата чего-либо\ d должно совпадать хотя бы один раз. Не уверен, каковы ваши требования, но если вам нужно и имя, и номер, PERL быстро и просто соскребет страницу с необходимыми данными и превратит ее в хеш с ключом / значениемпары.

Определенно проверьте http://www.regexr.com, сортировку регулярного выражения, эквивалентного CSS-саду дзен. Вы можете вставитьВключите в него исходный код и играйте с регулярными выражениями, пока он не найдет то, что вы хотите, и только то, что вы хотите.Для получения дополнительной информации и объяснения странного синтаксиса регулярных выражений, начните здесь и, очевидно, используйте Google.

Редактировать: кажется слишком поздно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...