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";
}
}