2013-11-27 2 views
1

У меня возникли проблемы с извлечением некоторых атрибутов из html-страницы и вам нужны некоторые идеи, которые помогут мне отклеить.Использование xpath для анализа атрибутов html с веб-страницы

Я использую PowerShell и использую команду htmlagilitypack, чтобы помочь мне разобрать html. У меня очень грубая версия, которую я мог делать с регулярным выражением, но она не всегда работает, поэтому я решил, что лучшим вариантом будет использование xpath для анализа результатов. Если регулярное выражение - это путь, пожалуйста, дайте мне знать.

До сих пор я мог захватить интересующую меня страницу и разделить ее по рядам.

$results = $htmldoc.DocumentNode.SelectNodes("//p[@class='row']") 

После страница разделена я пытаюсь перебирать каждую строку, используя XPath, чтобы захватить информацию я заинтересован в.

ForEach ($item in $results) { 

$ID=$null 

$ID = $item.OuterHtml 
} 

Это заставляет меня близко к тому, что я хотел, но это захватывает кучу другой информации, которую я тоже не хочу. Вот что выглядит $ item.outerhml.

OuterHtml   : <p class="row" data-latitude="41.5937565437255" data-longitude="-93.6437636649079" data-pid="4184719674"> <a href="/mod/4184719674.html" class="i"></a> 
        <span class="star"></span> <span class="pl"> <span class="date">Nov 27</span> <a href="/mod/4184719674.html">iPhone and other Cell Phone Unlocks</a> 
        </span> <span class="l2"> <span class="pnr"> <small> (Des Moines)</small> <span class="px"> <span class="p"> <a href="#" class="maptag" 
        data-pid="4184719674">map</a></span></span> </span> <a class="gc" href="/mod/" data-cat="mod">cell phones - by dealer</a> </span> </p> 

Мне просто нужен атрибут data-pid.

sorry for the crappy picture

Я перепробовал кучу других способов для извлечения данных Pid атрибута, но не имел никакого успеха. Вот один такой метод, который я пробовал, но он продолжает возвращать одно и то же значение снова и снова.

$ID = $Date.DocumentNode.SelectSingleNode("//p/@data-pid") 

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

+0

Вы должны более четко описать то, что Чтобы получить stuck_ означает. Вы получаете ошибку компиляции/синтаксиса? Получаете ли вы ошибку во время выполнения? Вы получаете пустой набор результатов? –

+0

Я пытаюсь извлечь атрибут data-pid для каждой строки таблицы и хранить его в переменной, но у меня возникают проблемы с работой. Вышеприведенный код получит то, что мне нужно, но я хочу получить атрибут data-pid. – jmreicha

ответ

1

В вашем foreach цикле вы должны быть в состоянии получить значение атрибута, как это:

$ID = $item.GetAttributeValue("data-pid", "") 

Ходить все атрибуты этого узла попробовать:

$item.Attributes | Select Name,Value 
+0

Знаете ли вы, можно ли использовать подстановочные знаки? – jmreicha

+0

Также, как лучше всего использовать это для вложенных тегов? Спасибо, до сих пор это происходит. – jmreicha

+0

Подстановочные знаки RE, я так не думаю, но вы можете использовать свойство Attributes, например: '$ item.Attributes | Выберите «Имя», «Значение». RE вложенные теги, вы всегда можете использовать $ item.SelectNodes (''). –

Смежные вопросы