📜  GOOGLE SHEETS 网页抓取商品价格 2021 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:31:02.959000             🧑  作者: Mango

GOOGLE SHEETS 网页抓取商品价格 2021 - TypeScript

本篇文章主要讲解如何使用 TypeScript 来爬取商品价格数据并存储在 Google Sheets 中。

准备工作

在开始之前,你需要拥有以下几个工具:

  • TypeScript
  • Google Sheets
  • Google Sheets API
  • Cheerio

在 VS Code 中新建一个 TypeScript 项目,并安装依赖包:

npm init -y
npm install typescript googleapis cheerio @types/node
Google Sheets API

首先,我们需要启用 Google Sheets API 并获取相应的凭据。可以按照此文档中的步骤进行操作:https://developers.google.com/sheets/api/quickstart/nodejs

在获取到凭据之后,我们需要使用 OAuth2Client 对象进行身份验证:

import { google } from 'googleapis';
import { OAuth2Client } from 'google-auth-library';

const credentials = require('./credentials.json');
const { client_secret, client_id, redirect_uris } = credentials.installed;

const oauth2Client = new google.auth.OAuth2(
    client_id,
    client_secret,
    redirect_uris[0]
);

oauth2Client.setCredentials({
    access_token: 'ACCESS_TOKEN',
    refresh_token: 'REFRESH_TOKEN',
    scope: 'https://www.googleapis.com/auth/spreadsheets'
});

由于 access_token 会在一段时间后过期,我们需要使用 refresh_token 来获取新的 access_token。

爬取数据

我们使用 Cheerio 这个库来进行页面解析。

import axios from 'axios';
import cheerio from 'cheerio';

const url = 'https://www.amazon.cn/dp/B0878Y2DP2';

const res = await axios.get(url);
const $ = cheerio.load(res.data);
const title = $('#productTitle').text().trim();
const price = $('#priceblock_ourprice').text().trim();

console.log(title, price);

在这里,我们使用 axios 来发起请求,并使用 cheerio 解析页面内容。

存储数据

我们使用 Google Sheets API 将数据存储在 Google Sheets 中。

const sheets = google.sheets({ version: 'v4', auth: oauth2Client });

await sheets.spreadsheets.values.append({
    spreadsheetId: 'SPREADSHEET_ID',
    range: 'Sheet1!A1:B1',
    valueInputOption: 'USER_ENTERED',
    requestBody: {
        values: [[title, price]]
    }
});

在这里,我们使用 sheets.spreadsheets.values.append 方法将标题和价格存储在第一个 sheet 的 A1 和 B1 单元格中。如果 B1 单元格不是空单元格,数据将会追加在它的下方。

以上就是如何使用 TypeScript 爬取数据并存储在 Google Sheets 中的全部内容。