使用亮数据工具抓取城市地铁数据实践

前言:

最近有个需求,需要抓取国内城市地铁数据,但是身为前端仔,没有爬过数据。就想图个方便好用的数据抓取工具,所以就去网上找了下技术方案,使用 Nodejs + puppeteer 来抓取数据,本着自己动手丰衣足食的原则,就采用该方案自己写了一个工具。

但是由于技术菜,各在线网站的抓取限制和其他成本原因导致效果实在是不理想

  • 1.抓取速度慢,数据量小
  • 2.抓取的数据不全

还遇到目标网站封锁 IP 的问题,导致抓取失败; 只能放弃自己实现抓取工具的方案;

转而寻求现有的抓取数据工具,问了一些大佬朋友,大佬说可以使用亮数据(Bright Data)的工具来抓取数据。

针对上面的数据规范抓取,IP 封锁的问题,亮数据的工具都有相应的解决方案。

所以就选择了亮数据(Bright Data)的工具来抓取数据。

亮数据工具介绍

从上图可以看到,亮数据工具提供了许多的现成的成熟方案以及在线产品来满足我们抓取数据不同需求,解决在线网站的抓取限制的各种问题和其他成本问题

所有产品使用可参见 亮数据(BrightData)官方产品文档

比如:

  • 代理服务:使用代理 IP 来抓取数据,避免 IP 被封锁
  • 数据抓取:
    • 100+网站专用端点数据抓取 API
    • 亮数据专用抓取浏览器工具
    • 网站验证拦截和验证码限制规避
    • 无服务器抓取程序
  • 数据集市场:126+ 域名、共 210+ 数据集,涵盖各大通用公共网络数据网站现成的预收集数据

全方位的解决方案,满足我们抓取数据的各种需求

并且现在注册,即可获取免费使用福利
注册专属链接:亮数据-网络IP代理及全网数据一站式服务商

数据抓取实践

确定数据来源

要抓取数据,首先需要知道数据的来源

比如这次我想要的国内各城市地铁数据

来源就是国内某地图在线提供商的地铁数据

出于安全因素,不能提供网站的具体的 URL 地址

比如:某个城市的数据如下再页面中如下:

由于数据是公开的,所以可以直接通过 URL 来获取数据

但是我需要的是 JSON 数据,页面是 HTML 数据,但是没关系

先拿到所有的 HTML 数据之后,再通过正则表达式来提取数据即可

所以目前这一阶段我的需求是

  • 获取所有城市的地铁数据的页面HTML数据

确定抓取工具

问题来了

但是我应该选择什么工具来抓取数据呢?

对于我来说最重要的:方便使用

尽量少的学习使用成本,尽量快的获取数据

查阅亮数据提供的爬取方案后,我发现了以下几种方案可以实现我的要求:

  • 1.网络解锁器
  • 2.SERP API
  • 3.抓取浏览器
  • 3.网页抓取 API

根据我的需求,并在阅读了亮数据的官方文档之后,我发现第一种比较合适

亮数据网络解锁器(Web Unlocker API)

通过文档查看后到这句话:亮数据网络解锁器只需向目标网站发送一个代理请求,我们就会将干净的 HTML 和/或 JSON 数据交付给您 。就是这么简单!

结合由于数据来源是在线网站,需求评估之后,我发现了亮数据网络解锁器工具满足我的需要

  • 方便上手
  • 开箱即用
  • 返回 HTML 数据

来看看官方介绍

亮数据网络解锁器最适用于

  • 从任何网站抓取数据,不会被屏蔽
  • 模拟真实用户的网络行为,对使用复杂检测方法的网站也能进行抓取
  • 内部没有可扩展的解锁基础设施的团队
  • 只需为成功的请求付费

仅从上面的介绍中,我就可以看到它的使用场景满足了我的需求

当然除此之外,亮数据网络解锁器还有其他的一些优点如下:

  • 浏览器指纹识别:模拟真实用户的浏览器行为,使其看起来像是由真人在操作
  • 处理 Cookie: 防止 Cookie 相关因素造成的潜在封锁
  • JavaScript 渲染:从依赖动态元素的网站中提取数据
  • 数据完整性验证: 确保数据的准确性、一致性和可靠性

使用亮数据抓取工具

创建抓取任务

打开工作台,点击创建任务,选择网络解锁器,填写任务名称,选择目标网站,选择代理类型,点击创建任务

创建成功之后,我们就会得到一个 curl 请求,我们可以使用【直接 API 访问】或者 【基于本机代理的访问】curl 请求来获取数据如下:

# 直接API访问 示例

curl https://api.brightdata.com/request -H "Content-Type: application/json" -H "Authorization: Bearer [replace with API Key]" -d "{\"zone\": \"web_unlocker1\",\"url\": \"https://geo.brdtest.com/mygeo.json\", \"format\": \"raw\"}"

注意
这里的 zone 是我们创建任务时选择的代理类型和类型

  • [replace with API Key] 是我们的 API Key (由亮数据提供)
  • zone 服务产品名称
  • url 是我们要抓取的目标网站
  • format 是我们要抓取的数据格式
    • raw 是原始数据
    • json 是 json 数据
    • html 是 html 数据
  • country 国家地区

但是这里我们可以不使用 curl 请求

由于我是使用 Nodejs 来抓取数据,所以找了一会文档

看到亮数据-API 文档

中提到可以使用js来执行请求,所以我就使用 js 来执行请求

使用curl API获取数据

我们可以使用 curl 请求来获取数据,也可以使用亮数据专用抓取浏览器工具来获取数据

但是数据量比较小,所以我直接使用 curl 请求在本机来获取数据

但是在此之前要配置 IP访问白名单

主要配置两项

  • 有权限的 IP
    • 就是你的服务器公网IP、或者宽度 IP
  • 有权限的目标主机(您的代理被允许访问的域)(即目标抓取网站的域名)
    • 这里配置测试网站域名 geo.brdtest.com
测试官方用例抓取数据

配置完成后,我到亮数据的在线接口实验场试用一下

playground 地址:Unlocker & SERP REST API 游乐场 - Bright Data Docs

返回结果如下:

{
  "country": "US",
  "asn": { "asnum": 398781, "org_name": "OSL-188" },
  "geo": {
    "city": "",
    "region": "",
    "region_name": "",
    "postal_code": "",
    "latitude": 37.751,
    "longitude": -97.822,
    "tz": "America/Chicago"
  }
}

数据爬取完美实现

地铁数据抓取实践

根据上面的测试案例,创建index.js

const axios = require("axios");

//#region ===== 请求函数封装
axios({
  url: "https://api.brightdata.com/request",
  timeout: 10000,
  method: "POST",
  headers: {
    Authorization: "Bearer [token]",
    "Content-Type": "application/json",
    "User-Agent":
      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
  },
  data: {
    zone: "web_unlocker1",
    url: "https://[target domain].com/subway/index.html?&1100",
    format: "raw",
    method: "GET",
    // country: "<string>",
  },
})
  .then((response) => {
    const res = response.data;
    console.log(res);
  })
  .catch((err) => console.error(err));

注意

  • [token] 是我们的 API Key (由亮数据提供)
  • url: "https://[target domain].com/subway/index.html?&1100", 是我们要抓取的目标网站
    • 这里?&1100参数表示 北京市地铁数据

然后CMD执行node index.js, 得到返回数据是html数据

由于整个html数据过多,以下是数据中我们需要的部分

可以看到

html元素<div class="line-caption-list"> 下表示线路

html元素<div id="subway" citycode="1100"> 则依次展示了所有线路的站台数据

之后我们使用正则表达式提取对应数据得到

当这只是一个城市的数据提取,其他城市的数据提取即可更换参数,城市的对应地理代码即可

总结

  • 1.创建任务,选择网络解锁器,填写任务名称,选择目标网站,选择代理类型,点击创建任务
  • 2.只需要配置IP访问白名单和有权限的目标主机即可
  • 3.获取亮数据提供的代理API数据抓取接口, url 参数填入目标网站, 即可获取数据;根据需求设置 format 数据返回格式
  • 3.使用亮数据工具抓取数据,不需要学习使用成本,只需要使用亮数据专用抓取浏览器工具或者js来执行请求即可

总的来说亮数据(Bright Data)的工具是一个非常好的工具,解决了我们抓取数据的各种问题,
针对上面的数据规范抓取,IP 封锁的问题,亮数据的工具都有相应的解决方案
甚至有现成的成熟方案以及在线预收集数据集

现在注册,即可获取免费使用福利
注册专属链接:亮数据-网络IP代理及全网数据一站式服务商

### 回答1: 明厨数据集csdn是一个公开的数据集,主要用于餐饮行业的信息整理和分析。这个数据集包含了大量的厨房和灶台的信息,例如厨房设备、菜品烹饪工艺、食材配料、每日用量等等。 通过明厨数据集,可以对餐饮行业进行全面的分析和评估。首先,通过分析厨房设备的使用情况,可以了解到不同厨房的规模、设备工艺等信息,从而为餐厅的装修和设备采购提供参考。其次,通过分析菜品烹饪工艺和食材配料,可以了解到菜品的制作流程和原材料的使用情况,从而为菜品的优化和成本控制提供指导。最后,通过分析每日用量,可以了解到不同菜品和食材的销售情况,从而为餐厅的销售策略和进货计划提供依据。 总的来说,明厨数据集csdn是一个非常有价值的数据集,可以为餐饮行业提供全面的数据支持,帮助企业进行科学管理和决策。通过对这个数据集的研究和利用,可以提高餐厅的效率和质量,进而提升企业的竞争力和盈利能力。 ### 回答2: 明厨灶是一个公开的数据集,由CSDN提供。该数据集包含了各类厨房设备、烹饪器具、食材等相关信息。明厨数据集主要用于研究厨房环境中的物体识别、场景理解、动作监测等相关技术。 这个数据集的收集方式是通过实地调研、采集各类厨房图片、视频,并进行人工标注,以确保数据的准确性和完整性。在这个数据集中,每个对象都有相应的标签,比如“炉灶”、“锅具”、“调料”等,这些标签可以帮助我们确定物体的类别。 我们可以利用明厨数据集进行多种研究,比如使用计算机视觉技术对厨房环境进行识别与监测。通过对数据集中的图片或视频进行训练,我们可以让计算机识别厨房中的各个物体,并监测其使用情况。这对于实现智能厨房、提高厨房工作效率和安全性等方面都具有重要意义。 此外,明厨数据集还可以被应用于智能家居领域,比如通过分析厨房中的物体使用情况,智能家居系统可以为用户提供更好的定制化服务,比如提醒用户补充调料、智能调整炉灶温度等。 总之,明厨数据集是一个有价值的数据集,可以被应用于厨房环境的物体识别和监测等相关技术的研究。它为我们提供了理解和改进厨房环境的机会,并在实际应用中发挥重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值