2015-06-06 2 views
1

Я новичок в PHP и пытаюсь написать скребок для веб-сайта.Получение href-атрибутов с использованием XPath в PHP

Я пытаюсь получить элемент с категориями категорий. У меня есть использовать

$showPage = '<li class="categories">Categories<ul> <li class="cat-item cat-item-940"><a href="http://www.desitvbox.me/category/star-plus/amul-taste-of-india/" >Amul Taste of India</a> 
</li> 
    <li class="cat-item cat-item-942"><a href="http://www.desitvbox.me/category/star-plus/dance-plus/" >Dance Plus</a> 
</li> 
    <li class="cat-item cat-item-239"><a href="http://www.desitvbox.me/category/star-plus/diya-aur-baati-hum-star/" >Diya Aur Baati Hum</a> 
</li> 
    <li class="cat-item cat-item-745"><a href="http://www.desitvbox.me/category/star-plus/suhani-si-ek-ladki/" >Suhani Si Ek Ladki</a> 
</li> 
    <li class="cat-item cat-item-147"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/" >Star Plus Completed Shows</a> 
<ul class="children"> 
    <li class="cat-item cat-item-772"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/airlines/" >Airlines</a> 
</li> 
    <li class="cat-item cat-item-518"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/arjun/" >Arjun</a> 
</li> 
    <li class="cat-item cat-item-237"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/chef-pankaj-ka-zayka/" >Chef Pankaj Ka Zayka</a> 
</li> 
</ul> 
</li> 
</ul></li>'; 
$dom = new DOMDocument(); 
$dom->validateOnParse = true; 
$dom->loadHTML($showPage); 
$dom->preserveWhiteSpace = false; 

$allShowsList = new DOMXPath($dom); 
$allShowsTableHTML = $allShowsList->query('//li[contains(@class, "categories")]'); 

Однако я хочу теперь прочитать значения всех A HREF упоминается в $ allShowsTableHTML.

Не могли бы вы посоветовать, как я могу это сделать?

Как вы можете видеть, в записи также есть ul class = 'childern'. который я также хочу прочитать.

Мне нужно получить href и заголовок.

Я пробовал ниже, но результата не получил.

$allShowTableDom = new DOMDocument(); 
foreach ($allShowTableHTML as $showLink) 
{ 
    $allShowTableDom->appendChild($allShowTableDom->importNode($showLink,true)); 
} 
$showsArray = $allShowsTableHTML->getElementsByTagName('a'); 

Я думаю, что это не происходит в петле foreach.

+0

Посмотрите разницу между XPath и XQuery. Вы используете XPath, XQuery является супермножеством и не поддерживается изначально PHP. –

ответ

0

Чтобы получить все атрибуты гиперссылок href, добавьте еще несколько шагов оси, наконец, перейдем к списку результатов, где свойство ->value будет содержать URI.

Учитывая, вы можете просто сбросить все атрибуты href внутри всего <li> элемента, просто расширить свой запрос на //a/@href:

$document = new DOMXPath($dom); 
$hrefs = $document->query('//li[contains(@class, "categories")]//a/@href'); 

foreach ($hrefs as $href) { 
    echo $href->value; 
} 

Если это содержит узлы, которые не хотят, чтобы вы могли также спускаться с содержать несортированный список и выберите более конкретный запрос:

//li[contains(@class, "categories")]/ul/li/a/@href 
+0

Спасибо за ваш ответ. Он работал идеально. Можете ли вы также посоветовать, как я могу получить название тега «a». то есть. название ссылки, как «Suhani Si Ek Ladki» ... По-настоящему ценю вашу помощь. –

+0

Пожалуйста, посмотрите [FAQ], нам не очень нравятся не связанные с ними последующие вопросы. Во всяком случае: вам нужно будет удалить шаг оси @ @ href' и использовать DOM PHP для доступа к обоим атрибутам. –

+0

Извините. Большое спасибо за вашу помощь –

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