2015-06-13 6 views
0

Использование PHP DomXPath для очистки некоторых веб-сайтов.Скребок с использованием DomXPath

В настоящее время используется tutorial для перемещения XPaths.

В настоящее время я очищаю это site, получая имена символов и идентификатор Steam (беспорядок XPath ниже - это то, что получает один Steam ID).

Мой вопрос: есть несколько идентификаторов Steam и имен персонажей. XPath, который я старательно создал, получает только один.

Как очистить от всех идентификаторов Steam ID вместо одного из них?

$xpath = new DomXPath($this->ourTeamHTML); 

/* Set HTTP response header to plain text for debugging output */ 
header("Content-type: text/plain"); 

$steamName = $xpath->query('//*[@id="wrapper"]/section/div/div[1]/div[2]/div[2]/div[1]/div/div/div[1]/div/div[1]/h5/b'); 
/* Traverse the DOMNodeList object to output each DomNode's nodeValue */ 
foreach ($steamName as $node) { 
    echo "Steam Name: " . $node->nodeValue . "\n"; 
} 

ответ

0

Вашего XPath слишком многословный, имея полный путь и индексы элементов он не является интуитивно понятным для чтения и имеет тенденции ломаться из-за незначительные изменения в исходном коде страницы. Попробуйте использовать следующий простой XPath:

//*[@id="wrapper"]//div[@class='col-md-12']//h5/b 

Он работал для меня, чтобы получить имена всех пар идентификаторов и символов (всего 32 элементов) от связанной страницы (протестировано с помощью firepath Фирефокса дополнения)

+0

Cool - это тоже звучит! – theGreenCabbage

+0

Если я хочу хранить их в массиве 'name' =>' SteamID', я полагаю, что я мог бы разделить имя и идентификатор Steam с помощью оператора '% 2' по индексам массива? – theGreenCabbage

+0

foreach ($ steamName как $ id => $ node) { if ($ id% 2 == 0) { echo "Steam Name:". $ node-> nodeValue. "\ П"; } else if ($ id% 2 == 1) { echo "Steam ID:". $ node-> nodeValue. "\ П"; } } – theGreenCabbage