首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript异步web爬虫

Javascript异步web爬虫
EN

Stack Overflow用户
提问于 2021-02-09 17:43:35
回答 1查看 174关注 0票数 0

我有一个异步功能,从csv文件中读取网站列表。

代码语言:javascript
复制
async function readCSV(){
  const fileStream = fs.createReadStream('./topm.csv');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });


  for await (const line of rl) {
    var currentline=line.split(",");
    
    var res_server_http = await check_page("http://www."+currentline[1]) 
  }

}

每次我阅读一个网站时,我都会调用check_page函数来做一些操作。每次我有一个,我会等待它的结束,然后再开始新的网站。

代码语言:javascript
复制
async function check_page(web_page){
     // do some operations....

}

在这一点上,它工作正常,但现在我必须集成我的代码与网络爬虫。在readCSV函数中,我必须为我读取的每个站点调用它,并且对于每个站点,我都应该调用check_page函数。

现在我已经这样编辑了readCSV

代码语言:javascript
复制
const fileStream = fs.createReadStream('./topm.csv');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });

for await (const line of rl) {
    var currentline=line.split(",");

    await (new Promise( resolve => {
      new Crawler().configure({depth: 2})
      .crawl(site, async (page) => {
          //console.log(page.url);
          var res_server_http = await check_page("http://www."+currentline[1])

          // Resolve here
          resolve();
      });
    }));
  
  }

我在web-crawler中使用以下代码:https://www.npmjs.com/package/js-crawler

此函数现在不起作用,因为它不是异步的。如何更改我的代码?

现在我有了这个错误:

代码语言:javascript
复制
(node:907) UnhandledPromiseRejectionWarning: ReferenceError: site is not defined
at /Users/francesco/Desktop/tesi/crawler.js:55:14
at new Promise (<anonymous>)
at readCSV (/Users/francesco/Desktop/tesi/crawler.js:53:12)
at processTicksAndRejections (internal/process/task_queues.js:97:5)

(节点:907) UnhandledPromiseRejectionWarning:未处理的promise rejection。此错误是由于在没有catch块的异步函数内部引发,或拒绝未使用.catch()处理的promise造成的。要在未处理的promise rejection上终止节点进程,请使用CLI标志--unhandled-rejections=strict (请参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝id: 2) (节点:907) DEP0018 DeprecationWarning:未处理的promise拒绝已弃用。将来,未处理的promise拒绝将使用非零退出代码终止Node.js进程。

EN

回答 1

Stack Overflow用户

发布于 2021-02-09 18:01:55

添加Promise

代码语言:javascript
复制
  for await (const line of rl) {
    var currentline=line.split(",");

    await (new Promise( resolve => {
      new Crawler().configure({depth: 2})
      .crawl(site, async (page) => {
          //console.log(page.url);
          var res_server_http = await check_page("http://www."+currentline[1])

          // Resolve here
          resolve();
      });
    }));
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66116417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档