如何在项目中使用 WSA?让我们通过这个简短示例来了解:我们将抓取亚马逊页面以查找最昂贵的显卡。此示例使用 JavaScript 编写,但您也可以使用任何您熟悉的编程语言实现。
首先,我们需要在项目终端中运行以下命令行,安装一些用于处理 HTTP 请求(got)和解析结果(jsdom)的包:
npm install got jsdom
下一步是设置请求所需的参数:
const params = {
api_key: "XXXXXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
这是我们向 WebScrapingAPI 发送请求以抓取网站数据的方式:
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
现在我们需要确定每个显卡元素在 HTML 中的位置。通过开发者工具,我们发现 class 为 s-result-item 的元素包含所有产品详情,但我们只需要其中的价格。
在该元素内部,我们可以看到有一个类名为 a-price 且带有子类 a-offscreen 的价格容器,我们将从中提取代表价格的文本。
WebScrapingAPI 会以 HTML 格式返回页面,因此我们需要对其进行解析。JSDOM 可以胜任此任务。
const {document} = new JSDOM(response.body).window
向 WSA 发送请求并解析其返回的响应后,我们需要过滤结果,仅提取对我们重要的内容。根据前一步的发现,我们知道每个产品的详细信息都位于 s-result-item 类中,因此我们遍历这些元素。在每个元素内部,我们检查价格容器类 a-price 是否存在;如果存在,则从其内部的 a-offscreen 元素中提取价格,并将其推入数组。
现在找出最贵的产品应该轻而易举。只需遍历数组并相互比较价格即可。
将其封装为一个异步函数后,最终代码应如下所示:
const {JSDOM} = require("jsdom");
const got = require("got");
(async () => {
const params = {
api_key: "XXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const products = document.querySelectorAll('.s-result-item')
const prices = []
products.forEach(el => {
if (el) {
const priceContainer = el.querySelector('.a-price')
if (priceContainer) prices.push(priceContainer.querySelector('.a-offscreen').innerHTML)
}
})
let most_expensive = 0
prices.forEach((price) => {
if(most_expensive < parseFloat(price.substring(1)))
most_expensive = parseFloat(price.substring(1))
})
console.log("The most expensive item is: ", most_expensive)
})();