首页 > 解决方案 > 如何在异步函数之外获取一系列链接?

问题描述

我是一名 Python 专家,对 puppeteer 和 JavaScript 非常陌生。我正在尝试抓取一个页面并从该页面中获取一些特定链接并将这些链接保存在一个数组中。我希望这个数组在函数之外并且是全局的。这是我的python代码:

base_url ="https://www.blablabla.com"
links = []
for a in soup.find_all('a',attrs={'class':"o-job-card"}, href=True):
    links.append( base_url + a['href'] ) 

但是我的老板希望我对 puppeteer 做同样的事情。无论如何,我想出了下面的解决方案。但是有一些问题:我可以 console.log(my_links[i]) 并查看链接,但我不能 links.push(my_links[i]); 我不明白为什么......有人可以向我解释一下吗?

这是整个代码:

const puppeteer = require('puppeteer');
async function main() {
  try {
    const browser = await puppeteer.launch();
    const [page] = await browser.pages();

    await page.goto('https://www.blablabla.com');
  
    return await page.evaluate(() =>
      Array.from(document.querySelectorAll('a.o-job-card[href]'), (a) => a.getAttribute('href'))
    );

  } catch (err) {
    console.error(err);
  }
}

let links = [];
var txt = 'https://www.blablabla.com';
let userToken = main();
userToken.then(function (my_links) {
  for (i = 0; i < my_links.length; i++) {
    my_links[i] = txt + my_links[i];
    links.push(my_links[i]);
  }
});

console.log(links);

标签: javascriptweb-scrapingpuppeteer

解决方案


推荐阅读