Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
2014-08-31 22:56
686 查看
HTTP协议支持文本和二进制文件传输。最常见的html格式的页面即文本,图片、音乐等为二进制文件。我们要对这两类文件加以区分并分别处理。
static char * BIN_SUFFIXES = ".jpg.jpeg.gif.png.ico.bmp.swf"; static int is_bin_url(char *url) { char *p = NULL; if ((p = strrchr(url, '.')) != NULL) { if (strstr(BIN_SUFFIXES, p) == NULL) return 0; else return 1; } return 0; }
char * attach_domain(char *url, const char *domain) { if (url == NULL) return NULL; if (strncmp(url, "http", 4) == 0) { return url; } else if (*url == '/') { int i; int ulen = strlen(url); int dlen = strlen(domain); char *tmp = (char *)malloc(ulen+dlen+1); for (i = 0; i < dlen; i++) tmp[i] = domain[i]; for (i = 0; i < ulen; i++) tmp[i+dlen] = url[i]; tmp[ulen+dlen] = '\0'; free(url); return tmp; } else { //do nothing free(url); return NULL; } } char * url2fn(const Url * url) { int i = 0; int l1 = strlen(url->domain); int l2 = strlen(url->path); char *fn = (char *)malloc(l1+l2+2); for (i = 0; i < l1; i++) fn[i] = url->domain[i]; fn[l1++] = '_'; for (i = 0; i < l2; i++) fn[l1+i] = (url->path[i] == '/' ? '_' : url->path[i]); fn[l1+l2] = '\0'; return fn; }
相关文章推荐
- Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
- Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据
- Linux企业级项目实践之网络爬虫(5)——处理配置文件
- Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据
- Linux企业级项目实践之网络爬虫(5)——处理配置文件
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- Linux企业级项目实践之网络爬虫(9)——通过URL抓取网页内容
- Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作
- Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
- Linux企业级项目实践之网络爬虫(11)——处理http请求头
- Linux企业级项目实践之网络爬虫(6)——将程序设计成为守护进程
- Linux企业级项目实践之网络爬虫(8)——认识URL
- Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头
- Linux企业级项目实践之网络爬虫(11)——处理http请求头
- Linux企业级项目实践之网络爬虫(8)——认识URL
- Linux企业级项目实践之网络爬虫(4)——主程序流程
- Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
- Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头