Javascript:Cherrio返回锚标记

时间:2017-10-30 19:29:23

标签: javascript cheerio

我正在尝试抓取网站并抓住他们的mailto链接:

const url = "https://www.cverification.com/";
axios.get(url).then(({ data }) => {
  const $_ = cheerio.load(data);
  const mailToLink = $_('a[href^="mailto:"]');
  console.log("maillllllllll: ", mailToLink);
  if (!mailToLink || !mailToLink.length) {
    console.log("NO EMAILLLL: ", url); // <------------ this prints
    return;
  }

  const email = mailToLink.attr("href").replace("mailto:", "");
  console.log("SUCCEEDEDDD", url, email);
});

然而,Cheerio正在为一些链接返回一个奇怪的对象:

maillllllllll:  initialize {
  options:
   { withDomLvl1: true,
     normalizeWhitespace: false,
     xml: false,
     decodeEntities: true },
  _root:
   initialize {
     '0':
      { type: 'root',
        name: 'root',
        namespace: 'http://www.w3.org/1999/xhtml',
        attribs: {},

此脚本适用于某些网站,而不适用于其他网站。当我访问https://www.cverification.com/并逐行运行代码(仅使用jQuery)时,它可以工作。我做错了什么?

1 个答案:

答案 0 :(得分:0)

正如评论中的其他人发现的那样,该网站使用的是React,因此在React注入所有组件之后插入了链接。

我通过更新请求的用户代理来修复此问题:

const instance = 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"
  }
});

这修好了!