网络用nodejs刮擦沃尔玛搜索
#node #webscraping #serpapi

将被刮擦

what

完整代码

如果您不需要解释,请看一下full code example in the online IDE

import dotenv from "dotenv";
import { config, getJson } from "serpapi";

dotenv.config();
config.api_key = process.env.API_KEY; //your API key from serpapi.com
const resultsLimit = 40; // hardcoded limit for demonstration purpose

const engine = "walmart"; // search engine
const params = {
  query: "macnook pro", // Parameter defines the search query
  page: 1, // Value is used to get the items on a specific page
  device: "desktop", // Parameter defines the device to use to get the results
  store_id: "2280", //Store ID to filter the products by the specific store only
  //other parameters: https://serpapi.com/walmart-search-api#api-parameters
};

const getResults = async () => {
  const results = {
    fixedQuery: null,
    organicResults: [],
  };
  while (results.organicResults.length < resultsLimit) {
    const json = await getJson(engine, params);
    if (!results.fixedQuery) results.fixedQuery = json.search_information?.spelling_fix;
    if (json.organic_results) {
      results.organicResults.push(...json.organic_results);
      params.page += 1;
    } else break;
  }
  return results;
};

getResults().then((result) => console.dir(result, { depth: null }));

为什么要从serpapi?

使用Walmart Search Engine Results API

使用API​​通常可以解决在创建自己的解析器或爬网时可能会遇到的所有或大多数问题。从网络剪接的角度来看,我们的API可以帮助解决最痛苦的问题:

  • 通过求解验证码或IP块,来自受支持的搜索引擎的旁路块。
  • 无需从头开始创建解析器并维护它。
  • 支付代理和验证码求解器。
  • 如果需要更快地提取数据,则不需要使用浏览器自动化。

前往Playground进行现场互动演示。

准备

首先,我们需要创建一个node.js* project并添加koude0 packages koude1koude2

为此,在我们项目的目录中,打开命令行并输入:

$ npm init -y

,然后:

$ npm i serpapi dotenv

*如果您没有安装node.js,则可以download it from nodejs.org并遵循安装documentation

  • SERPAPI软件包用于使用SERPAPI刮擦和解析搜索引擎结果。从Google,Bing,Bing,Yandex,Yahoo,Home Depot,eBay等获取搜索结果。

  • dotenv软件包是一个零依赖性模块,将环境变量从.env文件加载到process.env

接下来,我们需要在我们的package.json文件中添加一个带有“模块”值的顶级“类型”字段,以允许using ES6 modules in Node.JS

ES6Module

目前,我们完成了项目的设置node.js环境,然后转到分步代码说明。

代码说明

首先,我们需要从koude2库中导入dotenv,而configgetJsonkoude1库:

import dotenv from "dotenv";
import { config, getJson } from "serpapi";

然后,我们应用一些配置。致电dotenv koude12方法,将您的SERPAPI私有API密钥设置为全局koude8对象,以及我们要接收多少结果(resultsLimit常数)。

dotenv.config();
config.api_key = process.env.API_KEY; //your API key from serpapi.com
const resultsLimit = 40; // hardcoded limit for demonstration purpose
  • dotenv.config()将读取您的.env文件,解析内容,将其分配给process.env,并用parsed键返回包含已加载内容或error键的对象。
  • config.api_key allows您通过修改配置对象来声明全局api_key值。

接下来,我们编写搜索engine并编写用于提出请求的必要搜索参数(get the full JSON list of supported Walmart Stores):

ð注意:我在搜索查询中特别犯了一个错误,以演示Walmart Spell Check API的工作方式。

const engine = "walmart"; // search engine
const params = {
  query: "macnook pro", // Parameter defines the search query
  page: 1, // Value is used to get the items on a specific page
  device: "desktop", // Parameter defines the device to use to get the results
  store_id: "2280", //Store ID to filter the products by the specific store only
};

ð注意:另请参阅SerpApi Python demo project of extracting data from 500 Walmart stores and analyzing extracted data如果您想了解更多有关刮沃玛的刮擦。

您可以在API documentation中看到所有可用参数。

接下来,我们声明函数getResult,该函数从页面获取数据并返回:

const getResults = async () => {
  ...
};

在此功能中,我们需要声明一个对象两个键:fixedQuery等于null,然后使用koude27 loop get json与结果相同,然后将spelling_fix添加到fixedQuery,然后将organic_results添加到organic_results,然后添加fixedQuery,然后添加organic_results31 organicResults阵列(koude33方法)从每个页面中,并设置下一页索引(到params.page值)。

如果页面上没有更多结果,或者接收结果的数量超过reviewsLimit,我们会停止循环(使用koude36)并返回带有结果的数组:

const results = {
  fixedQuery: null,
  organicResults: [],
};
while (results.organicResults.length < resultsLimit) {
  const json = await getJson(engine, params);
  if (!results.fixedQuery) results.fixedQuery = json.search_information?.spelling_fix;
  if (json.organic_results) {
    results.organicResults.push(...json.organic_results);
    params.page += 1;
  } else break;
}
return results;

最后,我们运行getResults函数,并使用koude38方法在控制台中打印所有接收的信息,该方法允许您使用带有必要参数的对象来更改默认输出选项:

getResults().then((result) => console.dir(result, { depth: null }));

输出

{
   "fixedQuery":"macbook pro",
   "organicResults":[
      {
         "us_item_id":"121393924",
         "product_id":"18F5MJ3R95JG",
         "title":"Apple MacBook Air, 13.3-inch, Intel Core i5, 4GB RAM, Mac OS, 128GB SSD, Bundle: Black Case, Wireless Mouse, Bluetooth Headset - Silver",
         "thumbnail":"https://i5.walmartimages.com/asr/60e5ea72-ac15-4bdc-b112-572f76776e83.77df8900f9478a7a581dad9a6698ecd5.jpeg?odnHeight=180&odnWidth=180&odnBg=FFFFFF",
         "rating":3.5,
         "reviews":100,
         "seller_id":"F86EF73A620D4265AEE28E9FD77A4ED1",
         "seller_name":"Certified 2 Day Express",
         "fulfillment_badges":[
            "2-day shipping"
         ],
         "two_day_shipping":false,
         "out_of_stock":false,
         "sponsored":true,
         "muliple_options_available":false,
         "primary_offer":{
            "offer_id":"53A0316C100D4D1EBD2AD8753FC4FE25",
            "offer_price":349,
            "min_price":0
         },
         "price_per_unit":{
            "unit":"each",
            "amount":""
         },
         "product_page_url":"https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Intel-Core-i5-4GB-RAM-Mac-OS-128GB-SSD-Bundle-Black-Case-Wireless-Mouse-Bluetooth-Headset-Silver/121393924",
         "serpapi_product_page_url":"https://serpapi.com/search.json?device=desktop&engine=walmart_product&product_id=121393924"
      },
      ... and other results
   ]
}

链接

如果您想在此博客文章中添加其他功能,或者您想查看Serpapi,write me a message的某些项目。


加入我们的Twitter | YouTube

添加Feature Requestð«或Bugð