NodeJs网络爬虫文件扩展名处理

时间:2015-10-14 13:27:41

标签: node.js web-crawler file-extension

我在nodejs中开发了一个网络爬虫。我在网站抓取工具中创建了一个唯一的网址列表。但其中一些有像jpg,mp3,mpeg这样的扩展......我想避免抓取那些有扩展名的人。有没有简单的方法呢?

1 个答案:

答案 0 :(得分:1)

有两个选择。

1)使用path检查每个网址

如评论中所述,您可以使用path.extname来检查文件扩展名。因此,这个:

var test = "http://example.com/images/banner.jpg"
path.extname(test); // '.jpg'

这样可行,但感觉就像你必须创建一个可以抓取的文件类型列表,或者你必须避免。这是他的工作。

旁注 - 请谨慎使用path。通常,url是解析链接的最佳工具,因为path针对的是文件/目录,而不是网址。在某些系统(Windows)上,使用path来操作URL可能会因为涉及斜杠而导致剧情。公平警告!

2)获取每个链接的HEAD&查看content-type是否设置为text/html

您可能有理由避免拨打更多网络电话。如果是这样,这不是一个选择。但是,如果可以进行其他调用,则可以获取每个链接的HEAD并检查content-type中存储的MIME类型。

这样的事情:

var headersOptions = {
        method: "HEAD",
        host: "http://example.com",
        path: "/articles/content.html"
    };

var req = http.request(headersOptions, function (res) {
    // you will probably need to also do things like check
    // HTTP status codes so you handle 404s, 301s, and so on

    if (res.headers['content-type'].indexOf("text/html") > -1) {
            // do something like queue the link up to be crawled
            // or parse the link or put it in a database or whatever
        }
    });

req.end();

一个好处是你只抓住HEAD,所以即使文件是一个巨大的视频或其他东西,它也不会阻塞。你得到HEAD,看content-type是视频或其他什么,然后继续前进,因为你对这种类型不感兴趣。

其次,您不必跟踪文件名,因为您使用标准MIME类型来区分html与其他数据格式。