网页爬虫的最简C/C++程序代码示例------先通过列表获取所有博文id, 然后遍历所有博文id

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

          做个网页爬虫很简单, 本文我们来用C/C++语言玩一下, 所用环境是Windows + VC++6.0,  其余平台也类似。

          郑重说明:请勿用作非法或者商业用途, 否则后果自负敲打敲打敲打

 

          我们在新浪上随便找一个博客, 比如:http://blog.sina.com.cn/u/5890965060, 我们可以看到, 博主的用户名是:5890965060,   我们访问列表,并用fidder抓包, 可以确定列表访问格式, 直接上代码吧(如下程序只考虑功能, 不考虑性能微笑):

 

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int getRand(int n)
{
	return rand() % n + 1;
}

int main()
{
	int j = 1;
	for(j = 1; j <= 12; j++) // 博主的博文有12个列表
	{
		int flag = 0;
		WSADATA wsaData;
		WSAStartup(MAKEWORD(1,1), &wsaData);
		char szWeb[] = "blog.sina.com.cn";  // 新浪博客
		HOSTENT *pHost = gethostbyname(szWeb);
		const char* pIPAddr = inet_ntoa(*((struct in_addr *)pHost->h_addr)) ;
		printf("web server ip is : %s\n", pIPAddr);

		SOCKADDR_IN  webServerAddr;
		webServerAddr.sin_family = AF_INET;
		webServerAddr.sin_addr.S_un.S_addr=inet_addr(pIPAddr);
		webServerAddr.sin_port = htons(80);

		SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
		int nRet = connect(sockClient ,(struct sockaddr*)&webServerAddr, sizeof(webServerAddr));
		if(nRet < 0)
		{
			printf("connect error\n");
			return 1;
		}

		// 该博主博客列表访问格式/s/articlelist_5890965060_0_%d.html
		char szHttpRest[1024] = {0};
		sprintf(szHttpRest, "GET /s/articlelist_5890965060_0_%d.html HTTP/1.1\r\nHost:%s\r\nConnection: Keep-Alive\r\n\r\n", j, szWeb);

		printf("send buf is:\n");
		printf("%s\n", szHttpRest);

		nRet = send(sockClient , szHttpRest, strlen(szHttpRest) + 1, 0);
		if(nRet < 0)
		{
			printf("send error\n");
			return 1;
		}

		FILE *fp = fopen("test.txt", "a+");
		while(1)
		{
		    char szRecvBuf[2] = {0};
			nRet = recv(sockClient ,szRecvBuf, 1 ,0);
			
			if(nRet < 0)
			{
				printf("recv error\n");
				goto LABEL;
			}			
			
			if(0 == nRet)
			{
				printf("connection has been closed by web server\n");
				goto LABEL;
			}
			
			if(0 == flag)
			{
				printf("writing data to file...\n");
				flag = 1;
			}

			fputc(szRecvBuf[0], fp);
		}


	LABEL: 
		fclose(fp);
		closesocket(sockClient);  
		WSACleanup();  

		printf("list index is ------------------------------------> %d\n\n\n", j);
		Sleep(1000 * getRand(1));
	}

	printf("\n\n\ndone!!!!!!\n\n\n");

    return 0;
}

        过滤test.txt文件发现(过滤原则依赖于fiddler抓包, 从而确定博文链接的格式):

 

        对照一下原博文:


 

        完全吻合。

    

        如上过程就获取了每一篇博文的id,  也就是说, 获取到了每一篇博文的链接地址, 剩下的工作, 只需要稍微修改下上面的程序, 遍历访问博文链接地址, 就获取获取所有博文内容了。

 

        如果对上述程序进行优化控制, 完全可以做到自动化地获获取所有信息, 不需要人工干预中间过程。 

        当然,上述程序不仅仅是针对新浪, 也可以针对其他类似网站。 原理都一样, 其实还是蛮简单的, 就先说到这里了。

 

 

 

C++实现爬虫,深入理解爬虫原理(详细,单的教程) 1.将要爬取网页源代码下载到本地2.从网页源代码中解析出图片的地址,然后下载到本地.3.若不再使用网页源代码,可删除,避免占用大量磁盘空间.然后回到第一步循环,直到爬取完成对比之下,python写爬虫确实非常方便,也推荐大家用python写爬虫.但在此之前,应该要理解爬虫的原理,C++虽然繁琐,但却是理解原理的好助手.当大家慢慢积累出属于自己的C++类库时,也许比python更好用也说不一定呢源码下载httpshttpshttpshttpshttpshttpshttps。... 阅读详情

相关推荐

C++编写的多线程自动爬虫程序

本文介绍了一个使用C++编写的多线程自动爬虫程序的实现过程和测试方法。通过设计合理的爬虫框架和多线程策略,实现了高效的数据采集和处理功能。同时通过安全性测试和压力测试等措施,确保了程序的正常运行和高性能表现。在未来的工作中,可以对程序进行优化和改进以提高效率和安全性保障等方面的表现。同时也可以探索更加智能的数据清洗和处理方法以及更加灵活的调度策略等方向的研究和应用。

随便写写 1975

如何使用爬虫(C++篇)

我们可以使用 std::string 的 find 函数来搜索特定字符串,并使用 std::string 的 substr 函数来提取子串。2.你可以使用 c++11 中的 std::thread 库来创建多个线程,并使用 std::mutex 库来保护共享资源。首,你需要下载并安装 MySQL 数据库,并使用 MySQL 的命令行工具或图形化界面工具来创建一个数据库和表。另外,你还可以使用网页解析库,例如 HTML Agility Pack,来更方便地解析 HTML 网页

LanceZeng666的博客 3993

c++爬虫讲解

主机名就是去掉http之外,第一个斜线前的内容,如www.baidu.com , 等。接受数据用的recv函数可能不会一次全部接受回来,于是我们就要通过while循环,一次一次地接受信息。网站收到了请求,会做出回应,然后发回来,我们要做的就是定义一个大小足够的变量,存储信息。写好了请求书,得有一个信封把他装起来,这个信封就是套接字(socket)。请求网页返回信息前,你要用一个请求书发起请求。爬虫,并不是主动获取信息,而是向网页主机发送请求,网页根据请求返回信息。

jie201107的博客 1891

c++编写网络爬虫

c++编写爬虫爬取图片

hesphoros的个人博客 3785

C++winsock编程

Windows下进行网站内容的获取用winsock进行。 初步学习了winsock 转: C++网络爬虫的实现——WinSock编程 转: 网页爬虫C/C++程序代码示例------通过列表获取所有博文id, 然后遍历所有博文id ...

qq_38340979的博客 348

C++语言实现网络爬虫详细代码

近有关注到某论坛在讨论网络爬虫用python或者java等语言写有多么多么好,其实这种没法具体说哪个好,只能说各自有各自的优点,下文就是关于我使用C++语言写的爬虫代码,对于我来说挺单的,可以供大家参考下。

weixin_44617651的博客 3228

C++ 高性能爬虫

【代码】C++ 高性能爬虫

一个大佬的博客 8694

C/C++实现单的爬虫

作为一名程序员我觉得单的骚操作还是需要具备的,比如爬虫。本文主要介绍实现单的c++爬虫,为什么标题是c/c++呢,因为写的时候用到了一些c++内容但主要结构还是c顺序结构。主要实现了对http协议网站的图片爬取。 主要内容: 爬虫思路 开发时需要注意的地方 运行结果 需要改进的地方 完整源码 爬虫思路: 基本可分为三大步骤 用户输入起始地址 创建用来保存图片的文件夹 ...

赵满刚的博客 2万+

C++编程爬虫代码全过程分享

以下是使用C++编写一个爬虫程序的基本步骤和代码示例

weixin_44617651的博客 1470

爬虫算法】基于C++爬虫算法实现

在本次探索中,我们深入领略了基于 C++爬虫算法实现的精彩世界。从爬虫的基础概念出发,我们了解到它在互联网信息采集中的关键作用,就如同勤劳的 “信息矿工”,为我们挖掘出隐藏在网页深处的宝贵数据。C++ 作为实现爬虫的有力工具,凭借其高效的执行效率、强大的资源控制能力和良好的可扩展性,成为了众多开发者在爬虫领域的首选。

大雨淅淅的博客 2082

2024年全使用C++编写一个DHT爬虫,实现从DHT网络爬取BT种子_c++实现dht

虽然前面介绍了很多理论相关的知识,但是光有这些理论是没用的,中看不中用,接下来我们就实战一下,自己编写一个DHT爬虫,达到种子自由的目的,不对,是达到提高我们编程水平的目的。

2401_84561420的博客 2207

C/C++教程 第八章 —— 制作爬虫

本文介绍了如何使用C/C++编写爬虫,详细讲解了从下载网页源码到提取图片URL,再到下载图片的全过程。通过实例展示了C++中正则表达式库的使用,以及如何优化和扩展代码。爬虫虽非C/C++主流,但通过自编爬虫可以巩固基础知识并提高性能。

余识- 4895

python新浪博客爬虫(纯自己写)

python新浪博客爬虫(纯自己写) 一直在学习javaweb方面的知识,什么J2SE,ssh框架,tomcat,学的累了。突然想学习一门脚本语言,虽然js也会点,就是不怎么熟练。感觉Python挺有意思的,就花了两天学习了下,还知道可以比较方便的用来编写网络爬虫,觉得很有意思,所以就觉得自己编写一个,花了一晚上时间写了一个从新浪博客上爬韩寒文章的爬虫。自己编写的,洗的不好的地方,请指出,大家一

只喝白开水 1763

C++写个爬虫

好的,这是一个单的 C 语言爬虫的例子: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> // 定义一个结构体来存储网页内容 struct MemoryStruct { char *memory; size_t siz...

weixin_35756690的博客 520

2024年全使用C++编写一个DHT爬虫,实现从DHT网络爬取BT种子_c++实现dht,2024年新算法题面试

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是快捷也是有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

m0_61408947的博客 1079

java,c++,python实现爬虫效果

这三段代码都实现了一个单的爬虫功能,用不同的语言实现但调用的接口都是一样的。具体来说,就是向指定 URL 发送请求,并获取响应的内容输出到控制台。这是一个单的示例,如果要实现更复杂的爬虫功能,代码会更为复杂。不过,相比之下,Python 的代码实现更为单直观,C++ 的代码实现相对较为繁琐,而 Java 的代码实现则介于两者之间。分别用 C++、Java 和 Python 实现爬虫功能。

weixin_42759398的博客 440

C++网络爬虫

注意:这篇文章主要是关于怎样设计C++爬虫代码框架,具体实现还是得自己去开发,希望大家能有所收获。 1.关于项目 需求、设计、编码、测试、集成 2.软件开发要掌握的思想 模块思维 渐进式开发 3.需求: 自动抓取网络资源的软件 1.资源是什么?网页、图片、音乐、图片… 2.自动化?一旦运行就不需要更多的干预。 生成需求说明文档。 内容:对于需求中不明确或不完善的说明进行解释 4.设计: 业务设计:...

lc766666的博客 1万+

c/c++爬虫总结

本文主要讲我这几天学习了解c/c++爬虫的总结

m0_54069809的博客 2329

c++爬虫

// #include #include #include #include #include #include "winsock2.h" #include #include #include #pragma comment(lib, "ws2_32.lib") using namespace std; #define DEFAULT

悟世之路 1815
上一篇: 一个ip反序问题的定位和思考
下一篇: 如何用C/C++程序获取博客的访问量和积分信息
涛歌依旧
涛歌依旧 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄14年 28万+粉丝 2592原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值