关闭

C++网络爬虫设计与分析

发表于:2015-8-07 09:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:禅意    来源:51Testing软件测试网采编

  功能介绍:
  网络爬虫(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
  注:项目基本功能已经实现,但还存在一些小问题,如果大家感兴趣,可以自己尝试着修改一下,也可以自己根据这个思路自己设计一个爬虫。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • BDYD
    2015-8-08 00:33:54

    **于达校区严格遵循**总部的教学体系,秉承**“教育改变生活”理念,传承**“源自北大,永不妥协的教育品质”精神,集**于达校区多年经验,为上海地区**总部唯一授权软件测试培训中心,是**多课程高质量高就业校区。
    选择上海**,教育改变生活!选择**于达校区,成就你我!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号