• 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 

    注:项目基本功能已经实现,但还存在一些小问题,如果大家感兴趣,可以自己尝试着修改一下,也可以自己根据这个思路自己设计一个爬虫。

  • 相关阅读:
    python的json模块介绍
    采用boosting思想开发一个解决二分类样本不平衡的多估计器模型
    kappa系数
    android服务
    Android Studio 无法预览布局问题:com/android/util/PropertiesMap
    pitch yaw roll是什么
    keil5破解
    Eclipse/jre/jdk/jvm
    传感器
    Java静态代码块
  • 原文地址:https://www.cnblogs.com/yongssu/p/4692104.html
Copyright © 2020-2023  润新知