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

相关文章
相关标签/搜索