首页 > 其他分享 >js-crawl用法

js-crawl用法

时间:2024-06-15 09:01:41浏览次数:10  
标签:console url com 用法 爬网 js crawl page crawler

节点的Web爬网程序。JS,同时支持HTTP和HTTPS。

安装

npm install js-crawler

用法
爬网程序提供了直观的界面来爬网网站上的链接。实例

var Crawler = require("js-crawler");
 
new Crawler().configure({depth: 3})
  .crawl("http://www.google.com", function onSuccess(page) {
    console.log(page.url);
  });

对configure的调用是可选的,如果省略,将使用默认选项值。

onSuccess回调将为爬网程序已爬网的每个页面调用。传递给回调的页面值将包含以下字段:

url-页面的url
内容-页面正文(通常为HTML)
status-HTTP状态代码
可以从页面的其余字段中检索额外的信息:error、response、body,这些信息与传递给request模块的请求调用回调的信息相同。

referer字段将引用将爬网程序引导到当前页面的页面的url。

基于期权的API

用于将回调传递到爬网函数的替代API。

var Crawler = require("js-crawler");
 
var crawler = new Crawler().configure({ignoreRelative: false, depth: 2});
 
crawler.crawl({
  url: "https://github.com",
  success: function(page) {
    console.log(page.url);
  },
  failure: function(page) {
    console.log(page.status);
  },
  finished: function(crawledUrls) {
    console.log(crawledUrls);
  }
});

处理错误

可以传递一个额外的回调来处理错误,请考虑上面修改的示例:

var Crawler = require("js-crawler");
 
new Crawler().configure({depth: 3})
  .crawl("http://www.google.com", function(page) {
    console.log(page.url);
  }, function(response) {
    console.log("ERROR occurred:");
    console.log(response.status);
    console.log(response.url);
    console.log(response.referer);
  });

在这里,将为每个无法访问的页面调用第二个回调(可能是因为相应的网站关闭了)。可以不定义状态。

知道所有爬行何时完成
可以传递额外的回调,当所有url都已爬网并且爬网完成时将调用该回调。

所有已爬网的url都将作为参数传递给该回调。

var Crawler = require("js-crawler");
 
new Crawler().configure({depth: 2})
  .crawl("http://www.google.com", function onSuccess(page) {
    console.log(page.url);
  }, null, function onAllFinished(crawledUrls) {
    console.log('All crawling finished');
    console.log(crawledUrls);
  });

限制发出请求的速率
maxRequestsPerSecond选项

默认情况下,每秒发出的HTTP请求的最大数量为100,但如果不希望使用过多的网络,或者相反,希望更快地爬网,则可以使用maxRequestsPerSecond选项进行调整。

var Crawler = require("js-crawler");
 
var crawler = new Crawler().configure({maxRequestsPerSecond: 2});
 
crawler.crawl({
  url: "https://github.com",
  success: function(page) {
    console.log(page.url);
  },
  failure: function(page) {
    console.log(page.status);
  }
});

使用此配置,每秒最多只能发出2个请求。

实际请求速率也取决于网络速度,maxRequestsPerSecond仅配置上限。

maxRequestsPerSecond也可以是小数,例如,值0.1意味着每10秒最多有一个请求。

maxConcurrentRequests选项
当使用maxConcurrentRequests选项时,可能会有更大的灵活性,它限制了可以同时活动的HTTP请求的数量。

如果每秒的请求数对于给定的一组站点来说太高/网络请求可能会开始堆积,那么指定maxConcurrentRequest可以帮助确保网络不会因堆积的请求而过载。

指定两个选项
如果我们不确定网络和网站的性能如何,可以自定义这两个选项。

然后,maxRequestsPerSecond限制爬网程序允许发出的请求数量,maxConcurrentRequests允许指定爬网程序应如何根据网络/站点的实时性能调整其请求率。

var Crawler = require("js-crawler");
 
var crawler = new Crawler().configure({
  maxRequestsPerSecond: 10,
  maxConcurrentRequests: 5
});
 
crawler.crawl({
  url: "https://github.com",
  success: function(page) {
    console.log(page.url);
  },
  failure: function(page) {
    console.log(page.status);
  }
});

默认选项值
默认情况下,值如下所示:

maxRequestsPerSecond 100

maxConcurrentRequests 10

也就是说,我们预计平均每秒将发出100个请求,只有10个请求同时运行,每个请求大约需要100毫秒才能完成。

重复使用相同的爬网程序实例进行爬网:忘记已爬网的URL
默认情况下,爬网程序实例将记住它曾经爬网过的所有URL,并且不会再对它们进行爬网。为了让它忘记所有已爬网的URL,可以使用forgetCrawled方法。

还有另一种方法可以解决相同的问题:

create a new instance of a crawler. Example https://github.com/antivanov/js-crawler/blob/master/examples/github_forgetting_crawled_urls.js

支持的选项

depth-原始页面中的链接将被爬网到的深度。示例:如果site1.com包含指向site2.com的链接,其中包含指向site3.com的链接。

深度为2,并且我们从site1.com爬网,则我们将爬网site2.com,但不会爬网site3.com,因为它太深了。

默认值为2。

ignoreRelative-忽略相对URL,爬网时将忽略同一页面上的相对URL,因此将不会爬网/wiki/Quick Start,并且https://github.com/explore将被爬网。

当我们主要对当前网站所指的网站而不仅仅是原始网站的不同部分感兴趣时,此选项可能很有用。

默认值为false。

userAgent-与爬网程序请求一起发送的用户代理。
默认值为crawler/js crawler

maxRequestsPerSecond-爬网程序每秒可以发出的最大HTTP请求数,默认值为100

maxConcurrentRequests-爬网程序不应超过的最大并发请求数,默认值为10

shouldCrawl-指定是否应该对url进行爬网/请求的函数,返回true或false,参数是爬网程序考虑进行爬网的当前url

shouldCrawlLinksFrom-指定爬网程序是否应该爬网在给定url中找到的链接的函数,返回true或false,参数是当前正在爬网的url

注意:shouldCrawl决定是否应该请求/访问给定的URL,其中as shouldCrawfLinksFrom决定是否应该获取给定URL上的链接/将其添加到爬网队列中。

许多用户可能会发现,使用shouldCrawl就足够了,因为如果一开始就没有访问/请求过页面,则无法对页面中的链接进行爬网。

将这些函数分离的一个常见用例是:如果用户希望在不爬网外部链接的情况下检查网站上的外部链接是否存在错误,则用户可以创建shouldCrawlLinksFrom函数,该函数将爬网限制为原始url,而不访问外部链接。

示例:

以下将对指定的URL进行爬网,但不允许访问/请求外部URL,因此不搜索要在外部URL上爬网的其他链接:

var Crawler = require("js-crawler");
 
var crawler = new Crawler().configure({
  shouldCrawl: function(url) {
    return url.indexOf("reddit.com") < 0;
  }
});
 
crawler.crawl("http://www.reddit.com/r/javascript", function(page) {
  console.log(page.url);
});

以下将对指定的URL进行爬网,允许访问/请求外部URL,但不会在外部URL上搜索要爬网的其他链接:

var Crawler = require("js-crawler");
 
var crawler = new Crawler().configure({
  shouldCrawlLinksFrom: function(url) {
    return url.indexOf("reddit.com") < 0;
  }
});
 
crawler.crawl("http://www.reddit.com/r/javascript", function(page) {
  console.log(page.url);
});

每个的默认值都是一个始终返回true的函数。

发展
安装依赖项

npm install

运行生成

grunt

单元测试

grunt karma:unit

在控制台模式下启动单元测试

grunt karma:unit_browser

启动一个可以在其中调试单元测试的浏览器

端到端测试

jasmine-node and express are used to setup and run end-to-end tests

Install jasmine-node and express globablly

npm install -g jasmine-node
npm install -g express

启动端到端目标服务器

cd e2e
node server.js

标签:console,url,com,用法,爬网,js,crawl,page,crawler
From: https://www.cnblogs.com/full-stack-linux-new/p/18248975

相关文章

  • js-crawl爬取文本信息
    以下是如何使用js-crawl来爬取文本信息的基本步骤:安装js-crawl:首先,确保你已经通过npm安装了js-crawl。npminstalljs-crawler创建爬虫实例:引入js-crawl模块并创建一个新的爬虫实例。varCrawler=require("js-crawler");varcrawler=newCrawler();配......
  • win10 安装 nodejs
    转载自:https://www.cnblogs.com/Leo_wl/p/12388273.html#_label01、在使用之前,先类掌握3个东西,明白它们是用来干什么的:npm: nodejs下的包管理器。webpack:它主要用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源作相应的准备,比如资源的合并和打包。vue-cli:......
  • 基于cJSON及心知天气模块化实现获取城市气象信息(现在、未来)
    V1.02024年6月14日发布于博客园目录序言功能描述运行结果示范注意!代码weather_api.hweather_api.cdemo.ccJSON.hcJSON.c参考链接序言功能描述用于请求心知天气的信息,现在的信息,未来n天的气象信息(免费版仅能3天).使用域名通过TCP连接到心知天气服务器,采用cJSON进......
  • 利用某些平台(聚合API、百度AI、科大讯飞API)的API接口,利用HTTP协议向服务器发送请求,并
    要使用C语言通过HTTP协议向服务器发送请求并接收响应,你可以使用如libcurl这样的库来发送HTTP请求。libcurl是一个免费且易于使用的客户端URL传输库,支持多种协议,包括HTTP。同时,为了解析服务器响应中的JSON数据,你可以使用cJSON库,这是一个轻量级的JSON解析库。以下是一个简单的示例......
  • pdf.js打开自带的debug工具
    pdf.js自带有部分功能debug的工具,可以不用再源码里面,直接再url路径里面通过设置打开要在pdf.js中传入自带的debug功能,需要在url的后面通过#号跟功能的id即可,例如下面开启所有debug功能,那么就在url后面添加#pdfbug=all即可下面这个图是pdf.js的wiki上面所写的包含了debug的功能i......
  • (更新自2024年6月)Flutter3中BottomNavigationBar的用法。
    import'package:flutter/material.dart';voidmain(){runApp(MyApp());}classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnconstMaterialApp(home:MyHomePage(),);}}classMyH......
  • EL&JSTL26_JSTL标签3
    一、概念JavaServerPagesTagLibraryJSP标准标签库是由Apache组织提供的开源的免费的jsp标签 <标签>二、作用用于简化和替换jsp页面上的java代码三、使用步骤1、导入jstl相关jar包2、引入标签库:taglib指令:<%@taglib%>3、使用标签四、常用的JST......
  • jquery.form.js(ajax表单提交)
    参考代码:$("form").submit(function(){$(this).ajaxSubmit({url:"login",//设置提交的url,可覆盖action属性target:"#box",//服务器返回的内容存放在#box里type:"GET",dateTy......
  • 进程还在,JSF接口不干活了,这你敢信?
    1、问题背景:应用在配合R2m升级redis版本的过程中,上游反馈调用接口报错,RpcException:[Bizthreadpoolofproviderhasbeenexhausted],通过监控系统和日志系统定位到现象只出现在一两个节点,并持续出现。第一时间通过JSF将有问题的节点下线,保留现场,业务恢复。报错日志如下:24-03-......
  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 添加自定义(GLSL)数据
    ArcGISJSAPI高级教程-ArcGISMapsSDKforJavaScript-添加自定义(GLSL)数据核心代码完整代码在线示例ArcGISMapsSDKforJavaScript从4.29开始增加RenderNode类,可以添加数据以及操作FBO(ManagedFBO);通过操作FBO,可以通过后处理实现很多效果,官方提供了几......