- 將CSS格式化的HTML頁面存儲到MYSQL數據庫的最佳方式是什麼?可能嗎?
列類型應該是什麼?如何檢索存儲的格式化HTML並使用PHP正確顯示它?獲取HTML頁面並將其存儲在MYSQL中如何
如果我想抓取頁面有圖片和視頻,展示我保存頁面爲BLOB
什麼是使用PHP捲曲抓取網頁,FOPEN,..-最好的方法是什麼?
許多問題的傢伙,但我真的需要你的幫助,讓我在正確的方式做到這一點。
非常感謝。
列類型應該是什麼?如何檢索存儲的格式化HTML並使用PHP正確顯示它?獲取HTML頁面並將其存儲在MYSQL中如何
如果我想抓取頁面有圖片和視頻,展示我保存頁面爲BLOB
什麼是使用PHP捲曲抓取網頁,FOPEN,..-最好的方法是什麼?
許多問題的傢伙,但我真的需要你的幫助,讓我在正確的方式做到這一點。
非常感謝。
非常簡單,試試我爲你製作的這段代碼。
這是獲取和保存數據庫中的源代碼的基礎知識。
我沒有把錯誤處理或什麼別的,只是保持簡單的時刻...
我沒做的函數來顯示結果,但您可以打印$源查看結果。
希望這會幫助你。
<?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's it...
#Run the query
mysql_query($query);
#Close the connection
mysql_close($db);
}
$source = GetPage('http://www.google.com');
SaveToDB($source);
?>
您可以將數據存儲爲mysql中的文本數據類型
但您必須轉換數據bcz頁面可能會包含許多引號和特殊字符。
你可以看到這個問題THIS它不完全符合你的問題,但它會幫助你將數據存儲在數據庫中。
關於該圖像和視頻...如果您正在存儲頁面內容,那麼將只有該圖像和視頻的路徑..因此,當您將存儲在數據庫中時不會出現問題。
使用fopen拉下整個頁面並解析出任何URL(如圖像和css)。你會想要運行一個循環來抓取每個URL來生成頁面的文件。同樣保存這些內容,並將用於鏈接到其他網站文件的網址替換爲新鏈接。 (如果將來文件應該改變或被刪除,這將避免任何問題)。
我推薦使用blob數據類型只是因爲它可以將所有文件存儲在一個表中,但是您可以爲具有文本數據類型的頁面和使用blob存儲圖像和其他文件的頁面創建表格。
編輯: 如果您將blob數據類型存儲在base64_encode()中,它將增加服務器上的存儲空間,但您將避免使用引號和特殊字符的任何問題。
如果我錯了,請糾正我,你建議分兩步解析頁面。首先沒有鏈接到CSS和圖像,其次是鏈接。我的問題是,除了整體思考之外,我應該如何將其存儲在一個blob中,然後用正確的formaat檢索並顯示它?你能解釋一下嗎? – codemaker 2010-05-03 22:32:21
無法將整個頁面保存爲一個文件。您需要收集頁面內的鏈接(CSS,JavaScript,圖像等)。然後在本地打開並保存這些文件。很多鏈接都是相對的,修改它們讓fopen可以打開這些文件。一旦這些文件已保存在本地,請將html中的鏈接更改爲您的本地鏈接。你還必須檢查任何JavaScript和CSS的鏈接,並重復這些文件的過程。 〜我假設你正在使用它從其他站點翻頁(類似於http://www.archive.org/),而不是用它來存儲本地創建的模板。 – Mestore 2010-05-04 00:23:54
你知道在PHP中實現快速的HTML解析器來完成任務嗎? – codemaker 2010-05-04 12:08:39
不要使用關係數據庫來存儲文件。使用文件系統或NoSQL解決方案。
你可能想看看各種可用的開源蜘蛛(htdig和httrack浮現在腦海中)。
我會將這些URL存儲在一個數據庫中,並定期製作一個cron
作業到wget
這些頁面,並將它們存儲在它們自己的鍵控本地目錄中。使用wget
將允許您緩存頁面,並可選擇緩存其圖像,腳本等等。您也可以讓您的wget
命令更改嵌入的URL,以便不必緩存所有內容。
Here is the man page for wget,您可能還會考慮搜索「wget備份網站」或類似內容。 (通過「keyed directories」我的意思是說你的數據庫表有兩個字段,一個'key'和一個'url',那麼[unique]'key'就會成爲你存檔網站使用的路徑wget
。)
爲什麼不能,因爲網頁的網頁尺寸非常小,所以在將文本內容保存爲文本或Blob時沒有問題。我相信從數據庫讀取60KB左右的數據將比本地硬盤更快。 – codemaker 2010-05-04 19:01:45
非常感謝代碼。我需要用CSS和圖片存儲一個格式化的網頁,所以當我回應它時,結果將是一個格式化的網頁,就像原始網頁一樣。我不感謝上面的代碼會這樣做。如果我錯了,請糾正我。 – codemaker 2010-05-04 19:08:50
是的,它會自己嘗試,使用:echo GetPage('http://www.google.com'); 您將看到與google相同的頁面。 如果這不是你想要的,我不明白你的要求... – geek1983 2010-05-04 19:34:35
對不起,echo GetPage('http://www.google.com'); – geek1983 2010-05-04 19:35:27