user-0 提问: 用c语言完成，网站图片下载

回复:
user: user-0
content: 引用 17 楼 hiroyukki 的回复:[quote=引用 16 楼 beiye90 的回复:] [quote=引用 15 楼 hiroyukki 的回复:] [quote=引用 14 楼 beiye90 的回复:] [quote=引用 12 楼 hiroyukki 的回复:] 建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; } 有没有完整点的代码啊，我得分析下！[/quote] 上面代码是我的代码里抽出来的，原理我也说了，并且这思路一定能实现，自己动手吧，再要代码就是伸手党了，研究使用下libcurl也不错。 我也没用C写过类似你需求的程序，用python写过。[/quote]恩，我现在没有用libcurl，只是获取网站的源代码时放到一个文本里面查找,<img  这字符串 但是怎么输出 后面的链接啊？ 例如<img src="http://www.baidu.com/img/bdlogo.gif" width="270" height="129"></p><p id="nv"> 这个！如何在文本中把链接提取出来！[/quote] 你这是不道德的，N个问题在一个贴里问，连环问啊。 字符串截取这么基础都搞不定吗？比如对于上面的链接你可以这样： 1. 从<img后找第一个 " 位置计做N， N+1开始处即是http:，记做 S 2. 从 S 后找第一个 " 位置计做 M, M - 1处即是 .gif 的 f。记做 E 3. 截取 S - E 间的字串，http://www.baidu.com/img/bdlogo.gif  但HTML本身不像XML一样标准，可能没有"，方法多种多样，自己分析处理吧。[/quote]恩，现在我已经把图片的链接提取出来了，现在剩下最后一步下载图片了！目前不知道怎么办！

user: user-0
content: 引用 15 楼 hiroyukki 的回复:[quote=引用 14 楼 beiye90 的回复:] [quote=引用 12 楼 hiroyukki 的回复:] 建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; } 有没有完整点的代码啊，我得分析下！[/quote] 上面代码是我的代码里抽出来的，原理我也说了，并且这思路一定能实现，自己动手吧，再要代码就是伸手党了，研究使用下libcurl也不错。 我也没用C写过类似你需求的程序，用python写过。[/quote]恩，我现在没有用libcurl，只是获取网站的源代码时放到一个文本里面查找,<img  这字符串 但是怎么输出 后面的链接啊？ 例如<img src="http://www.baidu.com/img/bdlogo.gif" width="270" height="129"></p><p id="nv"> 这个！如何在文本中把链接提取出来！

user: user-1
content: 引用 16 楼 beiye90 的回复:[quote=引用 15 楼 hiroyukki 的回复:] [quote=引用 14 楼 beiye90 的回复:] [quote=引用 12 楼 hiroyukki 的回复:] 建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; } 有没有完整点的代码啊，我得分析下！[/quote] 上面代码是我的代码里抽出来的，原理我也说了，并且这思路一定能实现，自己动手吧，再要代码就是伸手党了，研究使用下libcurl也不错。 我也没用C写过类似你需求的程序，用python写过。[/quote]恩，我现在没有用libcurl，只是获取网站的源代码时放到一个文本里面查找,<img  这字符串 但是怎么输出 后面的链接啊？ 例如<img src="http://www.baidu.com/img/bdlogo.gif" width="270" height="129"></p><p id="nv"> 这个！如何在文本中把链接提取出来！[/quote] 你这是不道德的，N个问题在一个贴里问，连环问啊。 字符串截取这么基础都搞不定吗？比如对于上面的链接你可以这样： 1. 从<img后找第一个 " 位置计做N， N+1开始处即是http:，记做 S 2. 从 S 后找第一个 " 位置计做 M, M - 1处即是 .gif 的 f。记做 E 3. 截取 S - E 间的字串，http://www.baidu.com/img/bdlogo.gif  但HTML本身不像XML一样标准，可能没有"，方法多种多样，自己分析处理吧。

user: user-1
content: 引用 14 楼 beiye90 的回复:[quote=引用 12 楼 hiroyukki 的回复:] 建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; } 有没有完整点的代码啊，我得分析下！[/quote] 上面代码是我的代码里抽出来的，原理我也说了，并且这思路一定能实现，自己动手吧，再要代码就是伸手党了，研究使用下libcurl也不错。 我也没用C写过类似你需求的程序，用python写过。

user: user-0
content: 引用 12 楼 hiroyukki 的回复:建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; } 有没有完整点的代码啊，我得分析下！

user: user-2
content: 使用WebSeizer软件。

user: user-1
content: 建议使用libcurl，如果自己写TCP构造HTTP还是很麻烦的，libcurl很简单地构造HTTP请求。 分如下几步： 1. 将指定的网页内容下载到文件或内存(后面附下载到文件的代码) 2. 字符串分析下载到的内容，找 .jpg .bmp .gif .png 等指定的URL，记录下来。 3. 将2分析出来的所有图片的UTL使用1同样的方式进行下载到文件即可。 附URL下载到文件的示例：   static int _stream_writer(char* data, size_t size, size_t nmemb, FILE* f) {     fwrite(data, size, nmemb, f);     return nmemb * size; }  static int _download_to_file(const char* url, const char* file_name) {     int ret = 1;     FILE* f = 0;      do     {         f = fopen(file_name, "wb");         if (!f)         {             break;         }          curl_easy_setopt(gs_conn, CURLOPT_URL, url);         curl_easy_setopt(gs_conn, CURLOPT_WRITEFUNCTION, _stream_writer);         curl_easy_setopt(gs_conn, CURLOPT_WRITEDATA, f);          if (CURLE_OK == curl_easy_perform(gs_conn))         {             ret = 0;         }     } while (0);      if (f)     {         fclose(f);     }      return ret; }

user: user-3
content: 引用 8 楼 kang2618 的回复:知道用java有第三方的类库，去模拟浏览器抓网页和解析，c语言不知道 不管什么语言，原理都是一样的，只是Java比较方便，可以用现成的库，c语言的话要自己一点一滴的去实现

user: user-4
content: 引用 6 楼 kankan231 的回复:首先要知道tcp协议和http协议，利用http协议获取网页内容，然后用正则匹配所有图片标签，获取到图片的url，在用http协议去请求图片就可以了  是这样的。楼主要是没接触过，实现起来还是有点难度的。不过要是通过自己动手实现了，会很有成就感的

user: user-3
content: 首先要知道tcp协议和http协议，利用http协议获取网页内容，然后用正则匹配所有图片标签，获取到图片的url，在用http协议去请求图片就可以了

user: user-0

user: user-5
content: 假设该基本HTML文件的URL为:www.xxx.com/path/index.html。 　　下面是具体步骡: 　　1.HTTP客户初始化一个与服务器主机www.xxx.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。 　　2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/path/index.html。 　　3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息，再从服务器主机的内存或硬盘中取出对象/path/index.html，经由同一个套接字发出包含该对象的响应消息。 　　4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。        (非持久连接) 　　5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件，加以分析后发现其中有若干个图片对象的引用。 　　6.给每一个引用到的图片对象重复步骡1-4。         例如对 www.xxx.com/path/pic/xx.jpg 重复1-4。 可以使用相关的http库来完成  例如 WINHTTP。库可以自行选择。

user: user-0
content: 大早上的，没人吗？

user: user-0
content: 引用 2 楼 zxh707wk 的回复:只会c本地程序设计，不会网络编程额....这个好像网络那块挺多的...

user: user-6
content: 只会c本地程序设计，不会网络编程

user: user-0
content: 类似于这样类型的！

user: user-7
content: 哎 我也正在学习这方面的  对自动搜集非常感兴趣

user: user-8
content: 知道用java有第三方的类库，去模拟浏览器抓网页和解析，c语言不知道