我正在尝试抓取网站并抓住他们的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)时,它可以工作。我做错了什么?
答案 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"
}
});
这修好了!