如何大规模刮擦大型数据集
#编程 #node #codenewbie #webscraping

大型组织已努力构建应用程序,并皱着开发人员从其网站上提取数据。这就是为什么他们以用户代理的形式放置网关,让您知道允许的内容。

在大多数站点中,您可以在abrots.txt文件中找到这些详细信息,就像使用以下链接一样:

https://www.amazon.com/robots.txt

user agents

在本文中,您将学习使用Bright Data的Web刮板集成开发环境(IDE)使用现成的功能和编码模板来大规模刮擦数据集。

网络刮板的好处

这些是使用Bright Data的Web Scraper IDE的一些好处:

  • 可以从平台内访问IDE
  • 作为代理基础架构的领导者,它提供了网络刮擦的可扩展性和准确性
  • 其代码模板有助于加速开发
  • 它通过IDE结合了网络解锁功能,以避免验证码和阻塞。

什么是明亮的数据?

Bright Data是一个代理网络,可帮助您将网站转变为结构化数据。要开始使用该平台,请创建一个account

查看此资源以了解有关Bright Data的更多信息。

使用Web刮板IDE

在您的帐户仪表板上,单击数据集和Web刮板IDE 图标,然后选择启动按钮以打开模板窗口。

web scraper ide

新窗口弹出一个对话框,您可以在其中选择现有的数据集选项以使用或从头开始创建一个对话框。

ebay

选择 eBay Discovery和 pdp 选项,并且页面应与收集器代码相似。

collector code

现在向下滚动页面,在输入选项卡下,以要分析和提取数据的产品的名义传递。完成后,单击预览按钮以运行预览并开始提取。

input option

ps :您还必须注意,您可以在交互代码节中输入脚本。

在运行预览后查看输出结果选项卡,它根据以下数据分类从eBay网站上格式化了结果,例如 product_url title < /strong>,图像产品的价格等等。

output data

保存收藏家
要保存收集器,请单击完成编辑按钮以打开配置页面,如下所示:

saving the collector

通过API
启动收集器 在我的刮板选项卡下,让我们启动此项目,并通过单击API
按钮来使用启动来提供的脚本。

initiate by api

创建授权令牌
编程的授权将授予用户访问权限,并将您确定为帐户的合法所有者。

account settings

单击窗口左下方的帐户设置菜单以创建API令牌。

account settings for token

添加API令牌后,您将收到一个令牌以进行验证;输入秘密代码。

add api token

现在完成了,请复制您的API令牌键,因为除非您创建一个新的使用,否则无法检索它。

new api token

返回新收藏家页面,并根据您的终端中的操作系统(OS)复制脚本。确保用 api_token 用您在上一节中复制的键 bearer

copy the scripts

在您的命令行界面或终端中,API代码的结果应该看起来像这样:

 curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '[{"keyword":"ralph lauren polo shirt","count":10,"location":"","condition":"New unused"}]' "https://api.brightdata.com/dca/trigger?collector=c_liopmjh61f3o3lz7dz&queue_next=1"

cli

请求命令使代码在结果API 新收集器仪表板页面中处于活动状态。再次,请复制并将代码粘贴到CLI工具中。

result api

PS :请记住将您的API令牌键代替值 api_token

    curl "https://api.brightdata.com/dca/dataset?id=j_liosdy1cdutdi7sod" -H "Authorization: Bearer API_TOKEN"

在CLI中运行脚本,并且具有状态的对象中的数据集应读取构建消息

status and message report

如果响应继续显示,请重试发送请求。成功时,您应该看到此结果对象。

web scraper results

使用Postman

就像上面显示的对象一样,让我们​​使用 Postman 以获取结果API 的响应。

如果您没有Postman,请下载here。 Postman是一个用于构建,发布,监视,测试和记录API的API平台。检查this resource article以了解有关Postman及其使用的更多信息。

打开Postman应用并输入以下值:

  • 请求 postman中的部分,在Get Method中传递URL
  • 单击授权选项卡,然后从 type type 下拉列表中选择携带者令牌,传递令牌值
  • 单击发送按钮发送请求
  • 如果请求是成功的,则应在响应部分中看到200个状态消息,以及查询的一系列对象强>数据

postman

创建节点服务器

节点是一个JavaScript运行时环境,它允许在Web浏览器之外执行JavaScript代码,从而使开发人员能够构建服务器端应用程序和命令行工具。

让我们创建一个Web服务器。在终端中初始化项目的要求之一是使用软件包管理器npm,该软件包在您本地计算机上安装 node.js 后会自动存在。使用此命令检查它:

    node --version

它显示了节点的当前版本。

  • 创建一个新目录。对于此项目,它被命名为数据集
  • 更改其目录并使用命令初始化项目:
cd datasets

npm init -y

-y标志接受看起来像这样的默认值:

package.json

    {
      "name": "datasets",
      "version": "1.0.0",
      "description": "",
      "main": "index.mjs",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      ...
    }
  • 安装以下软件包:
    npm install -D nodemon

nodemon会自动更新源代码的任何更改并自动重新启动服务器。

    npm install csv-parse

csv-parse软件包是将CSV文本输入转换为数组或对象的解析器。

现在,将package.json文件中的脚本部分更新到以下:

    {
      "name": "datasets",
      "version": "1.0.0",
      "description": "",
      "main": "index.mjs",
      "scripts": {
        "start": "node index.mjs",
        "start:dev": "nodemon index.mjs"
      },
      ...
    }
  • 接下来,使用命令在根目录中创建一个新文件:
    touch index.mjs

要测试此文件,请写一个基本的JavaScript脚本,然后使用以下命令运行服务器:

    npm run start:dev

来自明亮数据的社交媒体数据

刮擦大型数据集需要大量精力和使用Node或Python等技术。解决此问题的方法是使用像Bright Data之类的平台来获取尽快获得结果所需的信息。

让我们从明亮的数据中获取此数据集,这将是社交媒体平台Instagram,其中包含以下步骤:

dataset marketplace

  • 打开数据集市场,并在类别下,从 instagram.com 中选择社交媒体下拉下。

instagram

  • 单击查看数据集,然后以 csv 格式下载示例数据集。

download CSV

确保将数据集保存在节点Web服务器的根目录中。

您的文件夹结构应该看起来像这样:

.
    └── datasets
        ├── node_modules
        ├── instagram.csv
        ├── package-lock.json
        ├── package.json
        └── index.mjs

在Node.js中读取CSV数据集

对于本节,节点将读取逗号分隔的值(CSV),该值来自Bright Data。

使用代码更新index.mjs文件:

index.mjs

    import { parse } from "csv-parse";
    import { createReadStream } from "node:fs";

    const instagramAccount = [];

    const isInstagramAccount = (info) => {
      return (
        info["posts_count"] > 300 &&
        info["followers"] > 6000 &&
        info["biography"] !== "" &&
        info["posts"] !== ""
      );
    };

    createReadStream("instagram.csv")
      .pipe(
        parse({
          columns: true,
        })
      )
      .on("data", (data) => {
        if (isInstagramAccount(data)) {
          instagramAccount.push(data);
        }
      })
      .on("error", (err) => {
        console.log("error", err);
      })
      .on("end", () => {
        console.log(`${instagramAccount.length} accounts are live`);
        console.log("done");
      });

上面的代码执行以下操作:

  • 使用createReadStream()方法打开文件或流并读取其中的数据
  • isInstagramAccount回调功能用于过滤来自实际CSV文件的数据
  • pipe:用于连接两个流,这意味着它连接到可读的流源到可写的目的地,parse()
  • columns:true:表示将我们的CSV文件中的每一行作为具有键值对的JavaScript对象,而不仅仅是一个值
  • .on:事件处理人员链接将新创建的数据推入空数组,instagramAccount并显示错误,显示存在的Instagram帐户的数量,最后指示完成当脚本完成

使用命令npm run start:dev运行脚本的脚本应在终端中显示这样的结果:

    643 accounts are live
    done

结论

Web刮擦是数据科学中使用的数据提取的组成部分。 Bright Data的Web Scraper IDE在背景中进行了所有繁重的举重,仅显示您使用的相关数据。

本文引导您了解如何使用Web刮板IDE以及如何构建自定义数据集脚本来查询大量公司数据集,而不必担心被旨在帮助保护公司的公司机器人阻止S数据。

资源