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();
1 回答
有两个选择 .
1) Use path to check every URL
如评论中所述,您可以使用path.extname来检查文件扩展名 . 因此,这:
这可以工作,但这感觉就像你最终必须创建一个你可以爬行或你必须避免的文件类型列表 . 这是工作 .
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类型 .像这样的东西:
一个好处是你只 grab HEAD,所以即使文件是一个巨大的视频或其他东西,它也不会堵塞 . 你得到HEAD,看
content-type
是一个视频或其他什么,然后继续前进,因为你对这种类型不感兴趣 .其次,您不必跟踪文件名,因为您使用标准MIME类型来区分html与其他数据格式 .