使用Nodejs中的无头浏览器进行网络刮擦
#编程 #node #codenewbie #webscraping

Web刮擦从网站收集并提取非结构化的数据,以更易读的结构化格式,例如JSON,CSV格式等。组织将guiding principles设置在允许的端点上。

刮擦网站以供个人使用时,每次手动更改代码可能会感到压力,因为大多数大型品牌网站都希望人们避免刮擦公共数据。设置了以下限制或问题,例如CAPTCHAS,用户代理(允许和禁止的端点)阻塞,IP封锁和代理网络设置。

网络刮擦的一种实际用例正在通知用户亚马逊,eBay等网站上的物品的价格更改。

在本文中,您将学习如何使用Bright Data的Scraping Browser进行大规模解锁网站,而不会因其内置解锁功能而被阻止。

沙箱

测试并在此Codesandbox中运行完整的代码。

先决条件

如果您有以下内容来完成本教程,这将有所帮助:

  • JavaScript的基本知识。
  • 在本地机器上安装了Node。需要安装依赖项
  • 代码编辑器-VS代码

什么是明亮的数据?

BRIGHT数据是具有大量Internet协议(IPS)网络的数据收集或聚合服务,并且可以将信息从网站上刮下来,从而避免通过公司机器人检测到可防止数据刮擦的资源​​。

本质上,Bright Data在其平台上可用的大数据集在后台进行了繁重的工作,这消除了被阻止或访问网站数据的担心。

什么是无头浏览器?

无头浏览器是一个无图形用户界面(GUI)的浏览器。现代网络浏览器,例如Google,Safari,Brave,Mozilla等;所有人都有一个用于交互性和显示视觉内容的图形接口。对于无头浏览器,它可以在背景中使用脚本或开发人员编写的命令行界面(CLI)。

使用无头浏览器进行网络刮擦至关重要,因为它允许您通过模拟用户行为来从任何公共网站提取数据。

无头浏览器适合以下内容:

  • 自动测试
  • 网络刮擦

木偶的好处

Puppeteer是无头浏览器的一个例子。以下是在网络刮擦中使用Puppeteer的一些好处:

  • 爬网单页应用程序(SPA)
  • 允许自动测试网站代码
  • 单击页面元素
  • Downloading data
  • 生成页面的屏幕截图和PDF

安装

为此应用创建一个新文件夹,然后运行下面的命令以安装节点服务器。

    npm init -y

该命令将初始化此项目并创建一个包含所有依赖项和项目信息的封装文件。 -y标志在应用程序初始化时接受所有默认值。

完成初始化后,让S使用此命令安装nodemon依赖关系:

    npm install -D nodemon

nodemon 是一种工具,可以在文件更改时自动重新启动节点应用程序。

package.json中,使用此代码更新脚本对象:

package.json

    {
      ...
      "scripts": {
        "start": "node index.js",
        "start:dev": "nodemon index.js"
      },
      ...
    }

接下来,在目录的根部创建一个文件,index.js,这将是编写脚本的切入点。

要安装的另一个软件包是puppeteer-core,即连接到远程浏览器时使用的无浏览器的自动化库。

    npm install puppeteer-core

用明亮的数据刮擦浏览器建造

Bright Data上创建一个帐户以访问其所有服务。但是对于这个项目,重点将放在刮擦浏览器功能上。

在您的管理仪表板上,单击代理并刮擦下属。

proxies and scraping infra

滚动到页面底部,然后选择刮擦浏览器。之后,单击列出的代理产品中的开始按钮。

Scraping browser

打开工具时,给代理一个名称,然后单击按钮,添加代理,,并在提示创建新区域时,选择是YES

naming the proxy

下一个屏幕应该是这样的,带有主机,用户名和密码。

host, username, and password

现在,单击按钮 查看代码和集成示例,在下一个屏幕上,选择node.js作为此应用的首选语言。

创建环境变量

环境变量是不应共享,托管或推到GitHub的秘密键和凭据,以防止未经授权的访问。

在目录的根部创建.env文件之前,让我们安装此命令:

    npm install dotenv

复制将此代码复制到.env文件,然后从您的访问参数中替换引号中的整个值 tab:

.env

    USERNAME="<user-name>"
    HOST="<host>"

使用Puppeteer创建网络刮板

回到入口点文件,index.js,copy-paste此代码:

index.js

    const puppeteer = require("puppeteer-core");
    require("dotenv").config();

    const auth = process.env.USERNAME;
    const host = process.env.HOST;

    async function run() {
      let browser;
      try {
        browser = await puppeteer.connect({
          browserWSEndpoint: `wss://${auth}@${host}`,
        });

        const page = await browser.newPage();
        page.setDefaultNavigationTimeout(2 * 60 * 1000);

        await page.goto("http://lumtest.com/myip.json");
        const html = await page.content();

        console.log(html);
      } catch (e) {
        console.error("run failed", e);
      } finally {
        await browser?.close();
      }
    }

    if (require.main == module) run();

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

  • 导入模块,puppeteer-coredotenv
  • 使用hostauth变量读取秘密变量
  • 定义异步run函数
  • 尝试块中,使用键browserWSEndpoint将端点与对象中的puppeteer连接
  • 浏览器页面以编程方式启动以访问不同页面,例如元素和启动事件
  • 由于这是一种异步方法,因此setDefaultNavigationTimeout设置了2分钟的导航超时
  • 使用goto函数导航到页面,然后使用page.content()方法获取URL的内容
  • 强制性的是,刮擦网后,您必须在finally块中关闭它

如果要扩展此项目,则可以在 png pdf 格式中获取网页的屏幕截图。

查看the documentation以了解更多信息。

结论

用明亮的数据基础结构刮擦网络,可以使您的用例更快地为您的用例提供了该过程,而无需从头开始编写脚本,因为它已经为您服务了。

今天尝试通过传统的网络刮擦工具,受到代理网络的限制,并与大型数据集一起工作,这是一项挑战。

资源

Scraping Browser documentation
Scrape at scale with Bright Data Scraping Browser