功能介紹:
網絡爬蟲(Web crawler),是一種“自動化瀏覽網絡”的程序,或者說是一種網絡機器人。它們被廣泛用於互聯網搜索引擎或其他類似網站,以獲取或更新這些網站的內容和檢索方式。它們可以自動采集所有其能夠訪問到的頁面內容,以便程序做下一步的處理。
設計思路:
1、下載html頁面。
2、解析當前html頁面的url和圖片url,將他們分別放在hrefUrl隊列和imgUrl數組中。
3、下載當前imgUrl下的所有圖片,並將他們存放在所對應url的文件夾下。
4、用廣度遍歷的方法,遍歷網站所有的url。
爬蟲框架設計分析:
class Crawler { private: string m_url; /// @brief 保存初始URL queue<string> m_hrefUrl; /// @brief 保存所有未訪問的href hash_set<string> m_visitedUrl; /// @brief 保存所有已經訪問過的url hash_set<string> m_visitedImg; /// @brief 保存已經訪問過的所有圖片 public: /// @brief 解析URL,獲得主機名,資源名 /// @param[in] url 要解析的URL /// @param[out] host 解析出來的host /// @param[out] resource 解析出來的資源名 bool parseURL(const string& url, string& host, string& resource); /// @brief 使用Get請求,獲得請求頁面 /// @param[in] url 請求的url /// @param[out] response 服務端返回的請求頁面內容 bool getHttpResponse(const string&url, string *&response); /// @brief 解析取得當前頁面的所有的href以及圖片URL /// @param[in] htmlResponse html頁面的內容 /// @param[out] imgurls 存儲所有圖片的url地址 void htmlParse(string& htmlResponse, vector<string>& imgurls); /// @brief 將url轉化為文件名 /// @param[in] url 需要轉化的url string toFileName(const string& url); /// @brief 將圖片下載到img文件夾下 /// @param[in] imgurls 所有圖片的url地址 /// @param[in] url 圖片所對應的url地址 void downLoadImg(vector<string>& imgurls, const string& url); /// @brief 下載一個url下的所有圖片 /// @param[in] url 需要下載圖片的url void bfs(const string& url); /// @brief 廣度遍歷下載所有url的圖片 void start(); public: /// @brief 構造函數 Crawler(); Crawler(const string &url); ~Crawler(); };
具體實現源碼及源碼使用方法請參考:https://github.com/yongssu/crawler
注:項目基本功能已經實現,但還存在一些小問題,如果大家感興趣,可以自己嘗試着修改一下,也可以自己根據這個思路自己設計一個爬蟲。