• Linux企业级项目实践之网络爬虫(17)——存储页面


    在爬虫系统中数据的流量相当大,要处理的数据内容不仅包括爬虫系统的各种数据结构空间,而且包括从外部节点中得到的各种数据,比如HTTP请求,HTML页面,ROBOT.TXT等等。如果对这些内容处理不当,那么不仅造成空间的冗余浪费,使爬虫程序效率降低,而且还可能会使系统崩溃。所以,要有合适的空间分配策略。
    空间分配与管理方案。
    在内存中使用缓冲空间,以快速的得到、存储数据。
    统一各种请求的结构,应该合理利用并在每次用完后进行回收。比如,ROBOT.TXT文件,HTTP请求头及相应的应答。这种方式,在站点数目数量相当庞大的情况下,非常有必要。

    在页面的抓取部分和保存部分之间设置合适的接口,直接进行数据交换,从而使系统不必分配更多的空间来缓冲数据。数据缓冲功能由保存部分内部实现。


    static int handler(void * data) {
        Response *r = (Response *)data;
        
        if (strstr(r->header->content_type, "text/html") == NULL)
            return MODULE_ERR;
    
        char *fn = url2fn(r->url);
        int fd = -1;
        if ((fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
            return MODULE_ERR;
        }
    
        int left = r->body_len;
        int n = -1;
        while (left) {
            if ((n = write(fd, r->body, left)) < 0) {
                // error
                close(fd);
                unlink(fn);
                free(fn);
                return MODULE_ERR;
            } else {
                left -= n;
            }
        }
        close(fd);
        free(fn);
        return MODULE_OK;
    }


  • 相关阅读:
    继承
    对象和封装
    类的无参、带参方法
    类和对象
    数组
    循环结构
    选择结构
    变量、数据类型和运算符
    快捷键
    MyEclipse与JDK的配置
  • 原文地址:https://www.cnblogs.com/new0801/p/6176994.html
Copyright © 2020-2023  润新知