2021-07-29

数据采集实战(二)-

1. 概述

京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。

采集京粉的商品,既可以练习 puppeteer的使用,平时想在京东购物时,也能用得上(采集看看有类似商品的价格和评价)。

2. 主要流程

采集的流程很简单:
image.png

2.1 登录

登录本来是很简单的步骤,只是京粉的登录有点特殊,它的登录框是在 iframe 中,所以,加载完网页后可能登录框并没有出现。
需要加载完 iframe 之后才能录入用户名/密码。
image.png

登录模块的代码如下:

const username = "YOUR NAME";const passwd = "YOUR PASSWORD";// 登录const login = async (page) => { await page.goto("https://union.jd.com/index"); // 等待加载 login 的 iframe await page.waitForSelector("#indexIframe"); const frame = (await page.frames())[1]; await frame.waitForSelector("#loginname"); // 输入用户名和密码 登录 await frame.type("#loginname", username, { delay: 100 }); await frame.type("#nloginpwd", passwd, { delay: 100 }); await frame.click("#paipaiLoginSubmit");};export default login;

2.2 进入"商品检索"菜单

登录成功后,进入首页,点击左侧的菜单进入"商品检索"页面。
image.png

注意这里直接使用 page 的 click 方法是无效的,需要使用如下方式:

// 进入商品界面const productPage = async (page) => { await page.waitForSelector(".menu-wrapper"); // 直接选择无法点击,只能用 page.evaluate 方法来点击 // 【我要推广】 菜单 await page.evaluate( (selector) => document.querySelectorAll(selector)[0].click(), ".el-submenu__title>span" ); // 【商品推广】 菜单 await page.evaluate( (selector) => document.querySelectorAll(selector)[1].click(), "li.el-menu-item>span" );};

2.3 录入检索条件并开始检索

商品推广页面支持的检索条件很多,这里只输入佣金价格的范围来检索:

// 检索商品(佣金比例范围,价格范围)const searchProduct = async (page, feeMin, feeMax, priceMin, priceMax) => { await page.waitForSelector(".imgbox"); await page.waitForSelector("input.el-input__inner"); const inputs = await page.$$("input.el-input__inner"); // IMPORTANT 使用click才能输入完整,使用 focus,无法输入完整 await inputs[1].click(); // await inputs[1].focus(); await inputs[1].type(feeMin, { delay: 200 }); await inputs[2].click(); await inputs[2].type(feeMax, { delay: 200 }); await inputs[3].click(); await inputs[3].type(priceMin, { delay: 200 }); await inputs[4].click(); await inputs[4].type(priceMax, { delay: 200 }); // 佣金和价格输入之后,鼠标必须浮在输入框上,才会出现确定按钮去检索 const divs = await page.$$(".commission"); // div对应的确认按钮在隐藏的 div中 let popover = await divs[1].evaluate((node) => node.getAttribute("aria-describedby") ); // 通过 hover()函数,让确定按钮显示出来 await inputs[4].hover(); await page.waitForSelector(`#${popover}`, { visible: true }); await page.click(`#${popover}>.el-button--primary`);};export default searchProduct;

佣金的范围(feeMinfeeMax),价格范围(priceMinpriceMax)是通过参数传入的。

image.png

2.4 保存网页

保存网页很简单,**puppeteer **提供了获取整个HTML页面的接口。

// 保存网页内容到指定路径const savePage = async (page, dirname, filename) => { const html = await page.content(); await saveContent(dirname, filename, html);};// 保存解析后的网页内容到指定路径const saveContent = async (dirname, filename, content) => { if (!mkdirsSync(dirname)) { console.error("mkdir save page dir ERROR!"); return; } fs.writeFileSync(path.join(dirname, filename), content);};

2.5 进入下一页

在页面的最下方有翻页的按钮,只要找到下一页的按钮......

原文转载:http://www.shaoqun.com/a/892261.html

跨境电商:https://www.ikjzd.com/

卖家精灵:https://www.ikjzd.com/w/532

阿里巴巴 批发:https://www.ikjzd.com/w/1084

asinseed:https://www.ikjzd.com/w/533


1.概述京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。采集京粉的商品,既可以练习puppeteer的使用,平时想在京东购物时,也能用得上(采集看看有类似商品的价格和评价)。2.主要流程采集的流程很简单:2.1登录登录本来是很简单的步骤,只是京粉的登录有点特殊,它的登录框是在iframe中,所以,加载完网页后可能登录框并没有出
crowd:https://www.ikjzd.com/w/880
四川省乡村旅游节8日开幕 :http://www.30bags.com/a/406852.html
四川省召开文化和旅游资源普查工作推进会:http://www.30bags.com/a/434492.html
四川湿地合集 邛海湿地收费也不虚嘛(2):http://www.30bags.com/a/416899.html
四川湿地合集 邛海湿地收费也不虚嘛(3):http://www.30bags.com/a/416898.html
女人最喜欢被㖭的是地方 喜欢让同学㖭我下面的感觉:http://lady.shaoqun.com/m/a/248367.html
老汉在我身上耕耘 好大好硬好深用力别停:http://lady.shaoqun.com/m/a/248166.html
四个人同时玩我下面 男人放进女人阳道图片:http://www.30bags.com/m/a/249692.html
招生在高校旁边开酒店的推广方式有争议:http://lady.shaoqun.com/a/428527.html
为什么大学附近有那么多小旅馆?大学生不都住校园吗?:http://lady.shaoqun.com/a/428528.html
大学周边的酒店往往供不应求。他们在里面做什么?你有过难忘的经历吗?:http://lady.shaoqun.com/a/428529.html
女人给你这四个暗示是因为想和你发生关系!:http://lady.shaoqun.com/a/428530.html

No comments:

Post a Comment