我在nodejs中开发了一个网络爬虫。我在网站抓取工具中创建了一个唯一的网址列表。但其中一些有像jpg,mp3,mpeg这样的扩展......我想避免抓取那些有扩展名的人。有没有简单的方法呢?
答案 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与其他数据格式。