C++網絡爬蟲設計與分析

功能介紹: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

相關文章
相關標籤/搜索