抓取某一個網站整站的記錄

純潔的蟲紙發表於2016-04-29

      經常由於某些原因我們需要爬取某一個網站或者直接複製某一個站點,到網上找了很多工具進行測試,試了很多各有各的問題,最終選擇了Teleport Ultra,用起來效果很好;具體的操作手冊等東西就不在這裡說了,網上搜尋一下有很多,這裡主要說遇到的問題:

軟體下載地址:http://download.csdn.net/detail/ityouknow/9506423

工具截圖:

image

測試抓取的網站為簡單心理:www.jiandanxinli.com

抓取後的效果圖

image

 

一般我會選擇複製100級基本上也就把網站的東西全部copy下來了,但是因為Teleport Ultra 是以UTF-8的編碼進行的抓取如果檔案中有中文字元,或者gbk編碼的檔案就會出現亂碼如下圖:

image

 

當然手動在瀏覽器選擇UTF-8也可以,但是我們不能每次開啟都這樣幹吧。於是到網站找到一款軟體叫:TelePort亂碼修復工具(siteRepair-v2.0),經過測試可以解決亂碼的問題,這款工具也會清除一些無效的連結和html符號等。

軟體下載地址:http://download.csdn.net/detail/ityouknow/9506429

軟體截圖:

image

 

絕大數網站再經過這兩個步驟應該都已經OK了,但是有的網站的層級結構中用到了中文目錄或者中文的檔名就會出現亂碼,類似下面的URL地址:

http://www.xxxx.com/.com/question/除了加鎖,還有什麼方法解決資源競爭的問題?/解決方案.html

這樣網站的結構抓取下來就會出現兩種亂碼:1)資料夾名亂碼 2)檔名亂碼

遇到這個問題siteRepair-v2.0工具就會報錯,我估計是不能識別亂碼的資料夾或者檔案吧。

 

後來在網上找了一個PHP的程式,進行了簡單的修改測試可以解決這個問題

PHP程式碼:convert.php

<?php
function listDir($dir)
{
    if(is_dir($dir))
    {
        if ($dh = opendir($dir)) 
        {
            while (($file = readdir($dh)) !== false)
            {
                if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
                {
                    rename($dir."/".$file,$dir."/".mb_convert_encoding($file,"GBK", "UTF-8"));
                    listDir($dir."/".$file."/");
                }
                else
                {
                    if($file!="." && $file!="..")
                    {
                         $name=rename($dir."/".$file,$dir."/".str_replace(`\`,``,mb_convert_encoding($file,"GBK", "UTF-8")));
                         echo `路徑:`.$dir."/".$file.`<br />`;
                         echo `結果: `.str_replace(`\`,``,mb_convert_encoding($file,"GBK", "UTF-8")).`<br />`;
                    }
                }
            }
            closedir($dh);
        }
    }
}
?>
<?php
//開始執行
listDir("./convert");

?>

 

在程式碼的同級目錄下,新建 convert資料夾,把亂碼的檔案放入這個目錄,然後執行convert.php即可。


相關文章