功能介紹:html
網絡爬蟲(Web crawler),是一種「自動化瀏覽網絡」的程序,或者說是一種網絡機器人。它們被普遍用於互聯網搜索引擎或其餘相似網站,以獲取或更新這些網站的內容和檢索方式。它們能夠自動採集全部其可以訪問到的頁面內容,以便程序作下一步的處理。git
設計思路:github
一、下載html頁面。數組
二、解析當前html頁面的url和圖片url,將他們分別放在hrefUrl隊列和imgUrl數組中。網絡
三、下載當前imgUrl下的全部圖片,並將他們存放在所對應url的文件夾下。框架
四、用廣度遍歷的方法,遍歷網站全部的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 搜索引擎
注:項目基本功能已經實現,但還存在一些小問題,若是你們感興趣,能夠本身嘗試着修改一下,也能夠本身根據這個思路本身設計一個爬蟲。url