Извлечь 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 может содержать множество кавычек и специальных символов.
вы можете увидеть этот вопрос ЭТО Его не точно для вашего вопроса, но он поможет, когда вы будете хранить данные в базе данных.
об этих изображениях и видео... если вы сохраняете содержимое страницы, тогда будут только пути к этим изображениям и видеороликам.. поэтому никаких проблем не возникнет, когда вы будете хранить в базе данных.