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


功能介紹:

  網絡爬蟲(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 

注:項目基本功能已經實現,但還存在一些小問題,如果大家感興趣,可以自己嘗試着修改一下,也可以自己根據這個思路自己設計一個爬蟲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM