繁体   English   中英

如何使用Javascript抓取Javascript呈现的网站?

[英]How to scrape Javascript rendered websites using Javascript?

我正在尝试刮擦此网站的$('a[href^="mailto:"]')https : //celsius.network/

当我进入浏览器控制台并运行它时,我得到一个链接,所以我知道它在那里。

问题是我的请求(使用Axios库)在加载javascript之前返回了DOM。 我已经设置了User-Agent,但看起来好像没有用。

const axiosClient = () =>
  axios.create({
    headers: {
      "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4"
    },
    timeout: 10000
  });


axiosClient()
  .get("https://celsius.network")
  .then(({ data }) => {
    console.log("DATAAAAAAAA: ", data);
  })

这将返回带有主体的原始HTML:

<body>
  <div id="app"> </div>
  ....

而不是在所有javascript处理完DOM之后完全加载的代码。

PS我是通过firebase函数来执行此操作的,所以我认为我可以安装的内容受到限制。

更新

const findEmail = url =>
  new Promise((resolve, reject) => {
     // here!
  });

您的请求方法不足以模仿您在浏览器中访问页面时的期望。 尽管有很多选择,但是伪娘可能是这份工作的候选人。

您可以在浏览器中手动执行的大多数操作都可以使用Puppeteer完成!

查看以下内容...

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://celsius.network/');
  const textContent = await page.evaluate(() => document.querySelector('a[href^="mailto:"]').textContent);

  console.log(textContent); // presale@celsius.network

  browser.close();
})();

我不清楚您的限制...

我可以安装的东西有限制

如果您有axios,我假设您可以安装此npm软件包?


根据您的更新,也可以通过promise API来制作人偶。 以下应该为您做...

const findEmail = url =>
  new Promise((resolve, reject) => {
    puppeteer.launch().then((browser) => {
      browser.newPage().then((page) => {
        page.goto('https://celsius.network/').then(() => {
          page.evaluate(() => document.querySelector('a[href^="mailto:"]').textContent).then((element) => {
            resolve(element);
            browser.close();
          });
        });
      });
    });
  });

findEmail().then((email) => {
  console.log(email); // presale@celsius.network
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM