Извлечь HTML-страницу и сохранить ее в MYSQL.
- Какой лучший способ сохранить отформатированную HTML-страницу с CSS в базе данных MYSQL? Является ли это возможным?
-
Какой тип столбца должен быть? Как получить сохраненный форматированный HTML и правильно отобразить его с помощью PHP?
-
Что делать, если страница, которую я хотел бы получить, содержит фотографии и видеоролики, показывает, что я храню страницу как blob
-
Какой лучший способ получить страницу с помощью PHP-CURL, fopen,..-?
Многие вопросы ребята, но мне действительно нужна ваша помощь, чтобы поместить меня на правильный путь, чтобы сделать это.
Большое спасибо.
Ответы
Ответ 1
Достаточно просто, попробуйте этот код, который я сделал для вас.
Это основы для захвата и сохранения источника в БД.
Я не выполнял обработку ошибок или что-то еще, просто сохраняйте это на мгновение...
Я не сделал функцию, чтобы показать результат, но вы можете распечатать источник $, чтобы просмотреть результат.
Надеюсь, это поможет вам.
<?php
function GetPage($URL)
{
#Get the source content of the URL
$source = file_get_contents($URL);
#Extract the raw URl from the current one
$scheme = parse_url($URL, PHP_URL_SCHEME); //Ex: http
$host = parse_url($URL, PHP_URL_HOST); //Ex: www.google.com
$raw_url = $scheme . '://' . $host; //Ex: http://www.google.com
#Replace the relative link by an absolute one
$relative = array();
$absolute = array();
#String to search
$relative[0] = '/src="\//';
$relative[1] = '/href="\//';
#String to remplace by
$absolute[0] = 'src="' . $raw_url . '/';
$absolute[1] = 'href="' . $raw_url . '/';
$source = preg_replace($relative, $absolute, $source); //Ex: src="/image/google.png" to src="http://www.google.com/image/google.png"
return $source;
}
function SaveToDB($source)
{
#Connect to the DB
$db = mysql_connect('localhost', 'root', '');
#Select the DB name
mysql_select_db('test');
#Ask for UTF-8 encoding
mysql_query("SET NAMES 'utf8'");
#Escape special chars
$source = mysql_real_escape_string($source);
#Set the Query
$query = "INSERT INTO website (source) VALUES ('$source')"; //Save it in a text row, that it...
#Run the query
mysql_query($query);
#Close the connection
mysql_close($db);
}
$source = GetPage('http://www.google.com');
SaveToDB($source);
?>
Ответ 2
Потяните всю страницу с помощью fopen и проанализируйте любые URL-адреса (например, изображения и css). Вы хотите запустить цикл, чтобы захватить каждый URL-адрес для файлов, которые генерируют страницу. Сохраните их также и замените URL-адреса, которые использовались для ссылки на другие файлы сайтов с вашими новыми ссылками. (это позволит избежать любых проблем, если файлы должны быть изменены или удалены в будущем).
Я бы рекомендовал использовать тип данных blob только потому, что он позволит вам хранить все файлы в одной таблице, но вы можете сделать таблицу для страниц с текстовым типом данных, а другой с blob для хранения изображений и других файлов.
Изменить:
Если вы храните в качестве типа данных blob в base64_encode(), это увеличит объем хранения на сервере, но вы избежите любых проблем с кавычками и специальными символами.
Ответ 3
Не используйте базу данных отношений для хранения файлов. Используйте файловую систему или решение NoSQL.
Возможно, вам захочется заглянуть в открытый паук с открытым исходным кодом (htdig и httrack приходят на ум).
Ответ 4
Я бы сохранил URL-адреса в базе данных и регулярно выполнял задание cron
на страницах wget
, сохраняя их в своих собственных локальных каталогах. Использование wget
позволит вам кэшировать страницу и, при необходимости, кэшировать ее изображения, скрипты и т.д..... Вы также можете изменить команду wget
для внедренных URL-адресов, чтобы вам не нужно было кэшировать все.
Вот страница man для wget, вы также можете рассмотреть поиск "веб-сайта резервного копирования wget" или аналогичного.
(Под "ключевыми каталогами" я имею в виду, что ваша таблица базы данных будет иметь 2 поля, "ключ" и "url", [уникальный] "ключ" будет тем местом, в котором вы архивируете веб-сайт для использования wget
.)
Ответ 5
Вы можете хранить данные в виде текстового типа в mysql
но вам нужно преобразовать данные. Страница bcz может содержать множество кавычек и специальных символов.
вы можете увидеть этот вопрос ЭТО Его не точно для вашего вопроса, но он поможет, когда вы будете хранить данные в базе данных.
об этих изображениях и видео... если вы сохраняете содержимое страницы, тогда будут только пути к этим изображениям и видеороликам.. поэтому никаких проблем не возникнет, когда вы будете хранить в базе данных.