PHP DOM getattribute манипулирование

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

Я хотел бы получить некоторые ссылки со страницы. Мне нужны только ссылки, содержащие следующее слово в URL: "advertid". Поэтому, например, URL-адрес будет выглядеть примерно так: http://thisisanadvertis.com/questions/ask.

Я так далеко

                <?php
// This is our starting point. Change this to whatever URL you want.
$start = "https://example.com";

function follow_links($url) {
    // Create a new instance of PHP's DOMDocument class.
    $doc = new DOMDocument();
    // Use file_get_contents() to download the page, pass the output of file_get_contents()
    // to PHP's DOMDocument class.
    @$doc->loadHTML(@file_get_contents($url));
    // Create an array of all of the links we find on the page. 
    $linklist = $doc->getElementsByTagName("a");
    // Loop through all of the links we find.
    foreach ($linklist as $link) {
        echo $link->getAttribute("href")."\n";
    }
}
// Begin the crawling process by crawling the starting link first.
follow_links($start);
        ?>

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

echo $link->getAttribute("href"."*advertid*")."\n";

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

Спасибо заранее.

4 ответа

Решение

Я хотел бы предложить вам использовать функцию PHP strpos

strpos принимает как минимум два параметра, первый - строка, в которой вы ищете. Второй параметр - это то, что вы ищете в первой строке.

strpos возвращает позицию строки, если она найдена, или false, если она не найдена.

Так что ваш цикл будет выглядеть примерно так:

foreach ($linklist as $link) {
    if( strpos($link->getAttribute("href"), 'advertid') !== false ){
       echo $link->getAttribute("href")."\n";
    }
}
$links = []
foreach ($linklist as $link) {
    $href = $link->getAttribute("href");
    if (preg_match('/.*advertid.*/', $href)) {
        array_push($links, $href);
    }
}
foreach ($linklist as $link) {
   if (strpos($link->getAttribute("href"), 'advertid') !== false) {
       echo $link->getAttribute("href")."\n";
   }
}

Вы можете проверить, есть ли у атрибута href нужная вам информация, с некоторой логикой, зависящей от случая:

foreach ($linklist as $link) {
    if(strpos($link->getAttribute("href"), 'advertid') >= 0) {
        echo $link->getAttribute("href")."\n";
    }
}
Другие вопросы по тегам