Linux企业级项目实践之网络爬虫(9)——通过URL抓取网页内容
2014-08-31 22:19
465 查看
基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志
爬虫系统要处理的URL是指使用超文本传输协议HTTP的URL。
URL分为绝对URL和相对URL
绝对URL显示文件的完整路径,这意味着绝对URL本身所在的位置与被引用的实际文件的位置无关。
相对URL以包含URL本身的文件夹的位置为参考点,描述目标文件夹的位置。如果目标文件与当前页面(也就是包含URL的页面)在同一个目录,那么这个文件的相对URL仅仅是文件名和扩展名,如果目标文件在当前目录的子目录中,那么它的相对URL是子目录名,后面是斜杠,然后是目标文件的文件名和扩展名。
如果要引用文件层次结构中更高层目录中的文件,那么使用两个句点和一条斜杠。可以组合和重复使用两个句点和一条斜杠,从而引用当前文件所在的硬盘上的任何文件,
一般来说,对于同一服务器上的文件,应该总是使用相对URL,它们更容易输入,而且在将页面从本地系统转移到服务器上时更方便,只要每个文件的相对位置保持不变,链接就仍然是有效地。
爬虫系统要处理的URL是指使用超文本传输协议HTTP的URL。
URL分为绝对URL和相对URL
绝对URL显示文件的完整路径,这意味着绝对URL本身所在的位置与被引用的实际文件的位置无关。
相对URL以包含URL本身的文件夹的位置为参考点,描述目标文件夹的位置。如果目标文件与当前页面(也就是包含URL的页面)在同一个目录,那么这个文件的相对URL仅仅是文件名和扩展名,如果目标文件在当前目录的子目录中,那么它的相对URL是子目录名,后面是斜杠,然后是目标文件的文件名和扩展名。
如果要引用文件层次结构中更高层目录中的文件,那么使用两个句点和一条斜杠。可以组合和重复使用两个句点和一条斜杠,从而引用当前文件所在的硬盘上的任何文件,
一般来说,对于同一服务器上的文件,应该总是使用相对URL,它们更容易输入,而且在将页面从本地系统转移到服务器上时更方便,只要每个文件的相对位置保持不变,链接就仍然是有效地。
char * url_normalized(char *url) { if (url == NULL) return NULL; /* rtrim url */ int len = strlen(url); while (len && isspace(url[len-1])) len--; url[len] = '\0'; if (len == 0) { free(url); return NULL; } /* remove http(s):// */ if (len > 7 && strncmp(url, "http", 4) == 0) { int vlen = 7; if (url[4] == 's') /* https */ vlen++; len -= vlen; char *tmp = (char *)malloc(len+1); strncpy(tmp, url+vlen, len); tmp[len] = '\0'; free(url); url = tmp; } /* remove '/' at end of url if have */ if (url[len-1] == '/') { url[--len] = '\0'; } if (len > MAX_LINK_LEN) { free(url); return NULL; } return url; }
相关文章推荐
- Linux企业级项目实践之网络爬虫(9)——通过URL抓取网页内容
- Linux企业级项目实践之网络爬虫(30)——通过查阅RFC文档扩充更加复杂的功能
- Linux企业级项目实践之网络爬虫(8)——认识URL
- 网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
- Linux企业级项目实践之网络爬虫(30)——通过查阅RFC文档扩充更加复杂的功能
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- Linux企业级项目实践之网络爬虫(8)——认识URL
- Linux企业级项目实践之网络爬虫(7)——DNS解析
- Linux企业级项目实践之网络爬虫(13)——处理user-agent
- Linux企业级项目实践之网络爬虫(4)——主程序流程
- Linux企业级项目实践之网络爬虫(4)——主程序流程
- Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据
- Linux企业级项目实践之网络爬虫(11)——处理http请求头
- Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
- Linux企业级项目实践之网络爬虫(15)——区分文本文件和二进制文件
- Linux企业级项目实践之网络爬虫(5)——处理配置文件
- Linux企业级项目实践之网络爬虫(6)——将程序设计成为守护进程
- Linux企业级项目实践之网络爬虫(10)——处理HTTP状态码