概要
在Puppeteer的入门教程和实践一文章,其中介绍了Puppeteer的几种使用方式,分别是网页截图,生成页面的PDF,分析当前页的脚本,写爬虫等,本文主要介绍了如何利用Puppeteer实现抓取淘宝特定商品的信息的过程。
代码
废话不多说,直接上代码。
//taobaoCrepper.js
const puppeteer = require(\'puppeteer\');
const chalk = require(\'chalk\');
let url = \'https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w19370147-18846483048.2.5ccf70bfVlqaMZ&id=568960237310&sku_properties=5919063:1173069333&scene=taobao_shop\'; //要抓取的商品链接
let main = async function(){
let browser = await puppeteer.launch({
headless:false,
devtools:true
});
let page = await browser.newPage();
await page.goto(url,{
waitUntil:\'networkidle0\'
});
console.log(chalk.green(\'进入宝贝详情页\'));
// await page.setViewport({
// width:1920,
// height:1080
// });
let obj ={
title:\'\',
colors:[],
price:0,
suit:[],
skus:[],
detailImgs:[],
evaList:[]
};
try{
//获取模态窗口
let modalArray = await page.$$(\'#sufei-dialog-close\');
//判断模态窗口是否存在,存在就关闭
if(modalArray.length){
await page.click(\'#sufei-dialog-close\');
}
await page.waitFor(15000);
obj.title= await page.$eval(\'.tb-detail-hd > h1 >a\',ele =>ele.text) ;
obj.price = await page.$eval(\'.tm-price\',ele => ele.innerHTML);
obj.colors = await page.evaluate(()=>{
let as = [...document.querySelectorAll(\'li.tb-txt a > span\')];
return as.map((a)=>{
return a.innerHTML;
});
});
obj.suit = await page.evaluate(()=>{
let as = [...document.querySelectorAll(\'li.tb-selected > a > span\')];
return as.map((a)=>{
return a.innerHTML;
});
});
obj.skus = await page.evaluate(()=>{
let as = [...document.querySelectorAll(\'ul#J_UlThumb >li> a > img\')];
return as.map((a)=>{
return a.src;
});
});
obj.detailImgs = await page.evaluate(()=>{
let as = [...document.querySelectorAll(\'div.ke-post > p > img\')];
return as.map((a)=>{
return a.src;
});
});
await page.click(\'a[href="#J_Reviews"] \');
await page.waitFor(15000);
obj.evaList = await page.evaluate(()=>{
console.log(\'进入评价分析抓取方法\');
let evaList = [...document.querySelectorAll(\'div.tm-rate-content>div.tm-rate-fulltxt\')];
console.log(evaList);
return evaList.map((a)=>{
return a.textContent;
});
});
}catch(err){
console.log(chalk.red(err));
}
};
main();
注意事项
(1) 跳转到淘宝商品信息页面时会弹出模态窗口,有时不会,需要做一个判断。
(2)跳转到商品评价列表后要设置延时,等DOM加载完毕后再去获取对应内容。
(3)在抓取评价列表详情时,选择器不能之写成“div.tm-rate-fulltxt”,否则后把卖家回复的内容也抓取下来。
(4)本文只是把特定内容用JS爬取出来,并不涉及写入数据库的操作,待我学完再来更新呀555。