Я не очень знаком с simple_html_dom
, но постараюсь ответить на вопрос. Эта библиотека использует file_get_contents
для предварительной обработки HTTP-запросов, но в PHP7 file_get_contents
не принимает отрицательное смещение (по умолчанию для этой библиотеки) при получении сетевых ресурсов.
Если вы используете PHP 7, вы установите смещение на 0.
$html = file_get_html($url, false, null, 0);
В вашей функции get_links
вы объединяете свои ссылки в строку. Я думаю, что лучше возвращать массив, так как вам понадобятся эти ссылки для новых HTTP-запросов в следующей функции. По той же причине, по которой вы не должны добавлять теги разрыва к ссылкам, вы можете разорвать их при печати.
function get_links($url)
{
$processed_links = array();
$base_url = implode("/", array_slice(explode("/", $url), 0, 3));
$html = file_get_html($url, false, null, 0);
foreach ($html->find(".summary h3 a") as $a) {
$link = $base_url . $a->href;
$processed_links[] = $link;
echo $link . "<br>\n";
}
return $processed_links ;
}
function reuse_links($processed_links)
{
foreach ($processed_links as $link) {
$ihtml = file_get_html($link, false, null, 0);
foreach ($ihtml -> find("h1 a") as $item) {
echo $item->innertext . "<br>\n";
}
}
}
$url = "https://stackoverflow.com/questions/tagged/web-scraping";
$pro_links = get_links($url);
reuse_links($pro_links);
Я думаю, что имеет смысл использовать основной URL в качестве параметра в get_links
, мы можем получить из него базовый URL. Я использовал функции массива для базового URL, но вы могли бы использовать parse_url
, который является подходящей функцией.