本次需要获取数据的网页为 京东热销
使用工具为 nodejs、 x-crawl。
一、初始化项目 并引用x-crawl。
import xCrawl from 'x-crawl'
const myXCrawl = xCrawl({
mode: 'async', //异步获取
enableRandomFingerprint: true //随机浏览器指纹
})
二、设置创建配置实例
myXCrawl.crawlPage('https://tophub.today/n/YqoXzV6dOD').then(async ({ data: { browser, page } }) => {
browser.close(); //运行结束关闭实例
});
三、打开网页,查看我们所需的dom结构
看到我们所需要的数据在类名为cc-dc-c的div里面,每个元素就是一个tr,我们选取这个div
myXCrawl.crawlPage('https://tophub.today/n/YqoXzV6dOD').then(async ({ data: { browser, page } }) => {
await page.waitForSelector('.cc-dc-c'); // 等待页面元素出现
const items = await page.$$('.cc-dc-c tbody tr');//选取每一个元素
await processItems(items); //把选择后的每一个元素交给另一个函数处理
browser.close(); //运行结束关闭实例
});
四、根据dom结构取出相应数据
//这里只演示取图片的url
async function processItems(items) {
for (const [index, dom] of items.entries()) {
//选取第二个子元素 的 im给标签
const secondChildImgSelector = 'td:nth-child(2) img';
//等待元素加载
await dom.waitForSelector(secondChildImgSelector);
const imgSrc = await dom.evaluate((element, selector) => {
const secondChildImg = element.querySelector(selector);
return secondChildImg ? secondChildImg.getAttribute('src') : '';
}, secondChildImgSelector);
//imgSrc 就是这条数据的图片url 取其他数据过程类似
}
最终效果达成: