首页 文章

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

提问于
浏览
0

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

1 回答

  • 1

    有两个选择 .

    1) Use path to check every URL

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

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

    这可以工作,但这感觉就像你最终必须创建一个你可以爬行或你必须避免的文件类型列表 . 这是工作 .

    Side note - 小心使用 path . 通常, url 是解析链接的最佳工具,因为 path 针对的是文件/目录,而不是网址 . 在某些系统(Windows)上,使用 path 来操作URL会因为涉及斜杠而导致戏剧性 . 公平的警告!

    2) Get the HEAD for each link & see if content-type is set to 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();
    

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

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

相关问题