返回博客
指南
Gabriel CiociLast updated on Mar 31, 20261 min read

如何抓取eBay页面以获取价格情报

如何抓取eBay页面以获取价格情报

让我给你描绘一下这样的场景:你刚刚上线了一家销售稀有复古电子游戏卡带的网店,却不太清楚该如何制定产品价格。

为产品定价总是充满挑战:如果价格定得太低,利润空间就会被压缩;如果价格定得太高,顾客对产品失去兴趣,转而向竞争对手购买。

真是左右为难。我们该怎么办?面对这个问题,你有两种解决方案:

  • 每天花数小时研究竞争对手的定价
  • 聪明一点,编写一个自动脚本,让它帮你自动完成这项繁琐的工作

你能猜到本文会选择哪种方案吗?既然时间就是金钱,而且我向来喜欢让生活更轻松,我们当然会选择第二种方案。

如果你觉得第一种方案更有趣,那你大可继续读下去。显然,你手头闲得发慌。

抓取eBay数据如何助力你的网店

eBay是美国第二大在线电商平台,占据19.7%的市场份额。凭借1.82亿活跃用户,eBay是我们进行价格情报分析的最佳网站之一。

在本示例中,我们将仅抓取商品价格,但eBay本身就是一座数据宝库。你还可以抓取评论区、提取负面关键词、进行情感分析,从而查明顾客对所购商品不满的原因。

您还可以抓取“浏览过此商品的人也浏览了”板块,以此洞察客户需求。利用这些信息,您可以为店铺上架新品,或创建包含更多商品的折扣套装。顾客一定会喜欢!

如何使用 WebScrapingAPI 抓取 eBay 数据

网络爬取面临的最大障碍之一,就是避免被目标网站封禁。幸运的是,只要拥有合适的工具,您就无需为此担忧。在这一点上,WebScrapingAPI是最佳解决方案,原因很简单:

  • 我们的免费套餐每月提供 1,000 次请求,无需信用卡。
  • 该 API 拥有超过 1 亿个轮换 IP 的代理池,确保请求互不冲突。
  • 仅需一行代码即可集成我们的 API。

您可能会疑惑,为何我们选择使用爬取 API 而不是自行开发。原因很简单:从零开始构建爬取工具可能需要数周时间

最大的难题并非开发工具本身,而是对其进行精细调优,以避免网站将其标记为机器人。

API 访问密钥与认证

访问 WebScrapingAPI 网站并创建账户。您将获得一个 API 密钥和 1,000 次免费请求。

安装依赖项

我们的这个小项目非常轻量,仅需两个依赖项:axioscheerio。Axios 是一个基于 Promise 的 Node.JS HTTP 客户端。我们使用该库来调用 WebScrapingAPI。第二个库 cheerio 是 jQuery 在服务器端的精简实现,我们将用它来解析产品页面。请使用以下命令安装依赖项:

npm install axios cheerio

初始化项目

创建一个 index.js 文件,并将以下代码粘贴进去:

const cheerio = require('cheerio');
const axios = require('axios');

const api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const product_url = 'https://www.ebay.com/itm/174620280276?epid=4444&hash=item28a82e05d4:g:UpMAAOSwfY5gYDr6';
const api_url = `https://api.webscrapingapi.com/v1?api_key=${api_key}&url=${encodeURIComponent(product_url)}`;
const hour_in_ms = 1000 * 60 * 60;

let product_price = null;

const check_price = async () => {

	// Scrape the document

	// Parse the document

	// Process the results

	// Check for any price change in one hour
	setTimeout(check_price, hour_in_ms)

}

(async () => check_price())()

如您所见,我们使用了一个带超时设置的递归函数,每小时抓取一次产品页面并检查价格是否发生变化。

抓取页面

// Scrape the document 替换为以下代码:

let response;

try {
	response = await axios.get(api_url);
} catch (error) {
	console.log(error);
	process.exit();
}

const $ = cheerio.load(response.data);

此代码使用 WebScrapingAPI 抓取 eBay 商品页面,并将结果转换为 cheerio 实例。

检查源代码

我们抓取了整个商品页面,但只需要商品价格。我们可以使用 cheerio 实例来获取价格值。商品价格的选择器是 #mainContent [itemprop="price"]

解析 HTML

替换 // 使用以下代码解析文档

let price = $('#mainContent [itemprop="price"]').html()

处理结果

价格以这种格式呈现:货币符号 金额。我们只需提取金额部分。将 // 处理结果 替换为以下代码:

price = parseInt(price
	.split(' ')[1]
	.replace('$', '')
	.replace(' ', '')
	.split(',').join('')
	.split('.')[0])

if(!product_price) {
	console.log(`Initial product price:`, price)
} else {
	if(product_price !== price) {
    		console.log('New price for product:', price)
	}
}

product_price = price

该代码将通过以下操作对价格进行清理:

  • 移除货币符号(US)
  • 移除货币符号 ($)
  • 移除所有空格 ( )
  • 从数字中移除逗号
  • 去除小数点

解析价格后,我们会记录初始价格,或者如果价格在两次抓取之间发生了变化,则记录新价格。

结论

借助几行代码和 WebScrapingAPI 这样的强大工具,我们成功编写了一个脚本,能够从 eBay 获取任意商品的价格。以此为基础,应用前景无限。您可以进一步优化脚本,实现以下改进:

  • 抓取商品标题以便更轻松地分类价格
  • 抓取多个商品并比较价格
  • 抓取其他 eBay 网站(如 ebay.de 或 ebay.ca)并比较同一商品的价格
  • 反其道而行之,抓取亚马逊商品页面,并对比两家网站上同一商品的价格
  • 实现电子邮件通知;建议使用 nodemailer 来完成此功能
  • 实现 Slack 通知;您可以使用库来完成该任务

针对此真实用例的解决方案最棒的一点在于,您无需花费金钱或宝贵时间即可完成所有操作。这是因为 WebScrapingAPI 提供为期两周的免费试用,让您能够免费使用其所有功能!

关于作者
Gabriel Cioci, 全栈开发工程师 @ WebScrapingAPI
Gabriel Cioci全栈开发工程师

加布里埃尔·乔奇(Gabriel Cioci)是 WebScrapingAPI 的全栈开发工程师,负责构建和维护该平台的网站、用户面板以及面向用户的核心功能模块。

开始构建

准备好扩展您的数据收集规模了吗?

加入2,000多家企业,使用WebScrapingAPI在无需任何基础设施开销的情况下,以企业级规模提取网络数据。