PHP DOM getattribute манипулирование - PullRequest
0 голосов
/ 11 октября 2018

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

Iхотел бы получить некоторые ссылки со страницы.Мне нужны только ссылки, содержащие следующее слово в 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 ]

0 голосов
/ 11 октября 2018
$links = []
foreach ($linklist as $link) {
    $href = $link->getAttribute("href");
    if (preg_match('/.*advertid.*/', $href)) {
        array_push($links, $href);
    }
}
0 голосов
/ 11 октября 2018

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

foreach ($linklist as $link) {
    if(strpos($link->getAttribute("href"), 'advertid') >= 0) {
        echo $link->getAttribute("href")."\n";
    }
}
0 голосов
/ 11 октября 2018

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

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

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

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

foreach ($linklist as $link) {
    if( strpos($link->getAttribute("href"), 'advertid') !== false ){
       echo $link->getAttribute("href")."\n";
    }
}
0 голосов
/ 11 октября 2018
foreach ($linklist as $link) {
   if (strpos($link->getAttribute("href"), 'advertid') !== false) {
       echo $link->getAttribute("href")."\n";
   }
}
...