在线客服

微信
扫一扫联系我

教程中心

Images

使用brightdata进行复杂的网页数据抓取

2023-06-28 11:06:49

抓取数据是网络开发人员的超能力,它使您超越普通网络用户的能力。您想找到最便宜的航班、最优惠的酒店房间,还是最后剩下的下一代游戏机?普通用户必须定期手动搜索,并且需要很大的运气才能买到便宜货。但网络抓取可以让您自动化该过程。机器人可以每隔几秒钟抓取一次数据,在超出阈值时向您发出警报,甚至以您的名义自动购买产品。

作为一个简单的示例,以下bash命令使用Curl来获取 SitePoint 博客索引页返回的 HTML 内容。它通过Grep传输结果以返回最新文章的链接:

curl 'https://www.sitepoint.com/blog/' | \
  grep -o '<article[^>]*>\s*<a href="[^"]*"'

程序可以每天运行类似的过程,与以前的结果进行比较,并在 SitePoint 发布新文章时提醒您。

在您尝试从所有您喜爱的网站中抓取内容之前,请尝试使用curlGoogle 搜索或 Amazon 链接。您很可能会收到 HTTP 503 服务不可用以及简短的 HTML 错误响应。网站通常会设置障碍来防止抓取,例如:

  • 检查用户代理、cookie 和其他 HTTP 标头,以确保请求源自用户的浏览器而不是机器人

  • 使用 JavaScript 支持的 Ajax 请求生成内容,因此 HTML 信息很少

  • 要求用户在显示内容之前与页面交互 - 例如向下滚动

  • 要求用户在显示内容之前登录 - 例如大多数社交媒体网站

您可以使用无头浏览器解决大多数问题,这是一种真正的浏览器安装,您可以使用驱动程序来模拟用户交互,例如打开选项卡、加载页面、向下滚动、单击按钮等。

您的代码将变得更加复杂,但这并不是问题的结束。一些网站:

  • 仅在某些连接上可用,例如移动网络

  • 通过检查请求者的 IP 地址将内容限制在特定国家/地区(例如,英国访问者可以使用bbc.co.uk ,但会将来自其他国家/地区的访问者重定向到内容和广告较少的bbc.com )

  • 阻止来自同一 IP 地址的重复请求

  • 使用验证码或类似技术来识别机器人

  • 使用Cloudflare等服务,可以防止在一个站点上检测到的机器人渗透到另一个站点

您现在需要适用于适当国家和网络的代理服务器,最好有一个 IP 地址池来逃避检测。curl我们离与一两个正则表达式组合的简单性还有很长的路要走。

幸运的是,Bright Data为这些技术问题提供了解决方案,它承诺“将网站转换为结构化数据”。Bright Data 通过强大的网络连接提供可靠的抓取选项,您可以在几分钟内完成配置。

无代码 Bright Data 数据集

如果您需要以下来源的数据,Bright Data 数据集是最简单的入门方法:

  • 电子商务平台,例如沃尔玛和各种亚马逊网站(.com.de.es.fr.it.in.co.uk

  • 社交媒体平台,包括 Instagram、LinkedIn、Twitter 和 TikTok

  • 商业网站包括 LinkedIn、Crunchbase、Stack Overflow、Indeed 和 Glassdoor

  • 目录,例如 Google 地图业务

  • 其他网站,例如 IMDB

数据集的典型用途是:

  • 监控竞争对手的定价

  • 跟踪您的最畅销产品

  • 投资机会

  • 竞争情报

  • 分析客户反馈

  • 保护您的品牌

在大多数情况下,您需要将数据导入数据库或电子表格以执行您自己的分析。

数据集根据复杂性、分析和记录数量定价。像 Amazon.com 这样的网站提供数百万种产品,因此获取所有记录的成本很高。但是,您不太可能需要一切。您可以使用自定义子集过滤数据集以返回感兴趣的记录。以下示例使用字符串 搜索 SitePoint 书名Novice to Ninja这返回的记录要少得多,因此只需几美分。

1.png

您可以通过电子邮件、Webhook、Amazon S3、Google Cloud Storage、Microsoft Azure Storage 和 SFTP 一次性或定时接收结果数据。

自定义数据集和 Web Scraper IDE

您可以使用收集器(一个控制 Bright Data 网络上的 Web 浏览器的 JavaScript 程序)从任何网站抓取自定义数据

下面的演示说明了如何在 Twitter 中搜索#sitepoint主题标签并返回 JSON 格式的推文和元数据列表。该收集器将使用 API 调用启动,因此您首先需要前往帐户设置并创建一个新的 API 令牌。

1.png

Bright Data 将向您发送一封包含确认号码的电子邮件。将其输入面板中,您将看到您的令牌(36 个字符的十六进制 GUID)。复制它并确保您已安全存储它:您将不会再看到它,并且如果丢失它,则需要生成新令牌。

前往数据收集平台菜单中的收集器面板并选择一个模板。我们在此示例中使用 Twitter,但您可以选择您需要的任何收集器或从头开始创建自定义收集器:

1.png

这将导致Web Scraper IDE,您可以在其中查看和编辑收集器 JavaScript 代码。Bright Data 提供 API 命令,例如:

  • country(code)在特定国家/地区使用设备

  • emulate_device(device)模拟特定的手机或平板电脑

  • navigate(url)在无头浏览器中打开 URL

  • wait_network_idle()等待未完成的请求完成

  • wait_page_idle()等待直到不再发出 DOM 请求

  • click(selector)单击特定元素

  • type(selector, text)在输入字段中输入文本

  • scroll_to(selector)滚动到某个元素,使其可见

  • solve_captcha()解决显示的任何验证码

  • parse()解析页面数据

  • collect()将数据添加到数据集

可以使用帮助面板,但如果您编写过无头浏览器或编写过集成测试,那么代码将会很熟悉。

在这种情况下,Twitter 模板代码不需要进一步编辑。

1.png

滚动到底部并单击“输入”面板以删除示例主题标签并定义您自己的主题标签(例如#SitePoint)。现在单击“预览”按钮以观看代码在浏览器中的执行情况。完全加载 Twitter 并向下滚动页面以呈现一系列结果将需要一两分钟的时间。

1.png

执行完成后,“输出”面板将显示捕获并格式化的结果。您可以下载数据并检查运行日志、浏览器控制台、网络请求和错误。

1.png

使用菜单或顶部的后退箭头返回到“收集器”面板。您的新收藏家已显示。

1.png

单击集成到您的系统按钮并选择以下选项:

  • 实时(单个请求)收集频率

  • JSON作为格式

  • API下载作为交付

1.png

单击更新以保存集成设置并返回到收集器面板。

现在,单击收集器旁边的三点菜单并选择Initiate by API


1.png

Initiate by API 面板显示两个curl请求命令。

1.png

第一个命令执行 Twitter 主题标签收集器。它需要您在上面创建的 API 令牌。将其添加到标题末尾Authorization: Bearer例如:

curl \
  -H "Authorization: Bearer 12345678-9abc-def0-1234-56789abcdef0" \
  -H "Content-Type: application/json" \
  -d '{"Hashtag - #":"#SitePoint"}' \
  "https://api.brightdata.com/dca/trigger_immediate?collector=abc123"

它返回带有作业的 JSON 响应response_id

{
  "response_id": "c3910b166f387775934ceb4e8lbh6cc",
  "how_to_use": "https://brightdata.com/api/data-collector#real_time_collection"}

您必须将作业传递response_id给 URL 上的第二个curl命令(以及授权标头中的 API 令牌):

curl \
  -H "Authorization: Bearer 12345678-9abc-def0-1234-56789abcdef0" \
  "https://api.brightdata.com/dca/get_result?response_id=c3910b166f387775934ceb4e8lbh6cc"

当收集器执行时,API 返回一条待处理消息:

{
  "pending": true,
  "message": "Request is pending"}

当收集器执行完毕后,它最终会返回一个包含推文数据的 JSON 结果。您可以根据需要将此信息导入到您自己的系统中:

[
  {
    "post": "https://twitter.com/UserOne/status/111111111111",
    "date": "2022-10-17T19:09:00.000Z",
    "Author": "UserOne",
    "post body": "Tweet one content",
    "likes": 0,
    "comments": 0,
    "Shares": 0,
    "input": {
      "Hashtag - #": "#SitePoint"
    }
  },
  {
    "post": "https://twitter.com/UserTwo/status/2222222222222",
    "date": "2022-10-08T13:28:16.000Z",
    "Author": "UserTwo",
    "post body": "Tweet two content",
    "likes": 0,
    "comments": 0,
    "Shares": 0,
    "input": {
      "Hashtag - #": "#SitePoint"
    }
  },...]

结果也可以从 Bright Data 面板中获得。

1.png

明亮的数据代理

如果您的要求不仅仅是抓取网站,您可以利用 Bright Data 的代理网络。示例用例:

  • 您有一个 Android 应用想要在印度的移动网络上测试

  • 您有一个服务器应用程序需要下载数据,就好像它是服务器真实位置之外的一个或多个国家/地区的用户一样

有一系列可用的代理,包括:

  • 住宅代理:住宅中安装的真实设备上的一组轮换 IP

  • ISP 代理:高速数据中心中的静态和旋转高速住宅 IP

  • 数据中心代理:静态和旋转数据中心 IP

  • 移动代理:在真实移动 3G、4G 和 5G 设备上轮换 IP

  • Web Unlocker代理:使用住宅网络的自动解锁系统,其中包括验证码解决

  • SERP API 代理:从搜索引擎结果收集数据的选项

每个选项都提供自动重试、请求限制、IP 轮换、IP 阻止、带宽减少、日志记录、成功指标和代理绕过等选项。价格范围为每 GB 0.60 美元到 40 美元,具体取决于网络。

最简单的入门方法是使用ChromeFirefox的浏览器扩展。您可以将扩展程序配置为使用任何特定的代理网络,因此它非常适合在特定位置测试网站。

1.png

对于更高级的使用,您需要代理管理器这是安装在您设备上的代理,充当您的应用程序和 Bright Data 网络之间的中间人。它使用命令行选项在对您进行身份验证并连接到真实代理之前动态控制配置。

版本可用于 Linux、macOS、Windows、Docker以及Node.js npm 包源代码可在 Github 上获取Bright Data 站点上的示例脚本curl说明了如何在 shell 脚本 ( )、Node.js、Java、C#、Visual Basic、PHP、Python、Ruby、Perl 等中使用代理。

代理的使用可能会变得复杂,因此 Bright Data 建议您联系您的客户经理讨论要求。

结论

多年来,随着网站试图阻止机器人、黑客和内容窃贼,抓取数据变得越来越困难。位置、设备和网络特定内容的复杂性使任务更具挑战性。

Bright Data提供了一种经济有效的途径来解决抓取问题。您可以立即获取有用的数据,并根据您的需求的变化采用其他服务。Bright Data 网络可靠、灵活且高效,因此您只需为成功提取的数据付费。