Как я могу получить HTML-код веб-страницы на PHP?
Я хочу получить HTML-код ссылки (веб-страницы) в PHP. Например, если ссылка
https://stackru.com/questions/ask
тогда я хочу HTML-код страницы, которая обслуживается. Я хочу получить этот код HTML и сохранить его в переменной PHP.
Как я могу это сделать?
9 ответов
Если ваш PHP-сервер поддерживает упаковщики URL-адресов, то самый простой способ:
$html = file_get_contents('http://stackru.com/questions/ask');
Если вам нужно больше контроля, то вам следует взглянуть на функции cURL:
$c = curl_init('http://stackru.com/questions/ask');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
Также, если вы хотите как-то манипулировать полученной страницей, вы можете попробовать какой-нибудь php DOM-парсер. Я нахожу, что PHP Simple HTML DOM Parser очень прост в использовании.
Простой способ: использовать file_get_contents()
:
$page = file_get_contents('http://stackru.com/questions/ask');
Обратите внимание, что allow_url_fopen
должно быть true
в тебе php.ini
чтобы иметь возможность использовать упаковщики fopen с поддержкой URL.
Более продвинутый способ: если вы не можете изменить конфигурацию PHP, allow_url_fopen
является false
по умолчанию, и если ext / curl установлен, используйте cURL
библиотека для подключения к нужной странице.
Вы можете проверить библиотеки YQL от Yahoo: http://developer.yahoo.com/yql
Задача под рукой так же просто, как
select * from html where url = 'http://stackru.com/questions/ask'
Вы можете попробовать это в консоли по адресу: http://developer.yahoo.com/yql/console (требуется вход в систему)
Также посмотрите скринкаст Криса Хейлманна, чтобы узнать, что еще вы можете сделать: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html
Вот два разных простых способа получить контент из URL:
1) первый способ
Включите Allow_url_include с вашего хостинга (php.ini или где-то еще)
<?php
$variableee = readfile("http://example.com/");
echo $variableee;
?>
или же
2) второй метод
Включить php_curl, php_imap и php_openssl
<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$variableee = get_dataa('http://example.com');
echo $variableee;
?>
Вы можете использовать метод DomDocument, чтобы получить отдельную переменную уровня тега HTML тоже
$homepage = file_get_contents('https://www.example.com/');
$doc = new DOMDocument;
$doc->loadHTML($homepage);
$titles = $doc->getElementsByTagName('h3');
echo $titles->item(0)->nodeValue;
Посмотрите на эту функцию:
Вы можете использовать file_get_contents, если вы хотите сохранить исходный код как переменную, однако лучше использовать curl.
$url = file_get_contents('http://example.com');
echo $url;
это решение будет отображать веб-страницу на вашем сайте. Однако скручиваемость является лучшим вариантом.
include_once('simple_html_dom.php');
$url="http://stackru.com/questions/ask";
$html = file_get_html($url);
Вы можете получить весь HTML-код в виде массива (проанализированной формы), используя этот код. Загрузите файл 'simple_html_dom.php' здесь http://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download
$output = file("http://www.example.com");
не работало, пока я не включил: allow_url_fopen, allow_url_include,
а также file_uploads
в php.ini
для PHP7
Я пробовал этот код, и он у меня работает.
$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);