я изо всех сил пытаюсь найти ответ для следующего … я подозреваю, что я действительно не знаю, о чем я прошу или как спросить это … позвольте мне описать:
Я хотел бы получить некоторые ссылки со страницы. Мне нужны только ссылки, содержащие следующее слово в 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";
Я попробовал несколько вещей … но не могу получить то, что хочу. Может кто-то направить меня в правильном направлении, я немного застрял.
Спасибо заранее.
Я бы предложил вам использовать функцию PHP StrPos
strpos принимает как минимум два параметра, первый — строка, в которой вы ищите. Второй параметр — это то, что вы ищете в первой строке.
strpos возвращает позицию строки, если она найдена, или false, если она не найдена.
Так что ваш цикл будет выглядеть примерно так:
foreach ($linklist as $link) {
if( strpos($link->getAttribute("href"), 'advertid') !== false ){
echo $link->getAttribute("href")."\n";
}
}
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";
}
}
$links = []
foreach ($linklist as $link) {
$href = $link->getAttribute("href");
if (preg_match('/.*advertid.*/', $href)) {
array_push($links, $href);
}
}