使用Node.js实现针对Chrome专用的网页爬取

介绍如何使用Node.js在Chrome上应用专门针对网页抓取的技术。您可以使用Puppeteer和Puppeteer-Extra来处理动态内容并避免阻塞。

4,007
使用Node.js实现针对Chrome专用的网页爬取
目录

你好,今天我将介绍如何使用Node.js而不是Ruby、Python或Java来创建网络爬虫。特别是,我们将详细了解强大的Node.js库Puppeteer以及其扩展Puppeteer-Extra,它们可以控制Google Chrome或Chromium。

Puppeteer是什么?

Puppeteer是一个Node.js库,可以让您像用户一样与网站互动,从而实现网页爬取和操作网站。Puppeteer通常在无头模式下运行,可以在后台执行操作而无需GUI,但也可以根据需要切换到具有完整浏览器UI的有头模式。

为什么要使用Puppeteer?

1. 优化了对Chrome的性能

Puppeteer使用Chrome DevTools Protocol直接与Chrome浏览器通信。这使得它比使用类似Selenium的其他自动化工具提供的WebDriver API更快速、更精确。

2. 强大的动态网页内容处理能力

Puppeteer在处理静态页面以及通过JavaScript动态生成的内容方面表现出色。这意味着它可以有效处理现代网页的复杂交互和动态元素。

3. 避免封锁

在实际的爬取任务中,Puppeteer可以有效地避开封锁并收集数据。特别是使用Puppeteer-Extra和Stealth Plugin,可以绕过自动化检测机制,更稳定地收集数据。

Puppeteer-Extra和Stealth Plugin

Puppeteer-Extra

Puppeteer-Extra是一个构建在基本Puppeteer库之上的扩展,通过灵活的插件系统,用户可以轻松集成所需的附加功能。这样可以提升功能性,改善爬虫的可用性。

Stealth Plugin

Stealth Plugin是Puppeteer-Extra的插件之一,可以有效地避开常见的自动化检测,使爬取更加顺利。许多网站会阻止爬虫,但使用这个插件,即使是自动化爬虫也可以看起来像用户的浏览器一样。

实际应用示例

现在让我们使用Puppeteer-Extra和Stealth Plugin来执行简单的爬取任务。

1. 安装所需模块

执行以下命令以安装puppeteer-extra和puppeteer-extra-plugin-stealth模块。

npm install puppeteer-extra puppeteer-extra-plugin-stealth

2. 导入所需模块

import puppeteer from "puppeteer-extra";
import StealthPlugin from "puppeteer-extra-plugin-stealth";
import fs from "fs";

3. 处理命令中的URL输入异常

由于将来会使用node node_js.mjs https://www.example.com这样的命令直接输入URL,如果没有URL,则插入代码以引发异常。

const args = process.argv.slice(2); // 첫 번째 요소는 Node.js 실행 경로이므로 제외
if (args.length < 1) {
  console.error("URL 파라미터가 필요합니다.");
  process.exit(1); // 오류로 종료
}

4. 应用stealth插件

puppeteer.use(StealthPlugin());

5. 与浏览器交互

puppeteer.launch({ headless: false }).then(async browser => {
  // 해당 headless는 하지 않고 눈에 보이게 브라우저를 띄워줍니다.

  const url = args[0]; // 첫 번째 파라미터로부터 URL 가져오기

  const page = await browser.newPage(); // 새 브라우저 열기
  await page.goto(url); // url로 페이지 이동
  await page.waitForTimeout(5000); // 렌더링 완료를 위해 5초 대기

  const currentUrl = await page.url(); // url을 변수에 저장
  console.log("현재 페이지의 URL:", currentUrl); // url이 제대로 담겼는지 출력

  // 페이지의 HTML을 변수에 저장
  const html = await page.content();

  // HTML 내용을 파일로 저장합니다
  fs.writeFile("pageContent.html", html, (err) => {
    if (err) {
      console.error("파일 저장 중 오류 발생:", err);
    } else {
      console.log("HTML이 성공적으로 저장됨: pageContent.html");
    }
  });
});

6. 执行命令

为了接收输入,我们创建了一个mjs文件。

node [파일명].mjs https://www.naver.com

URL将在浏览器中打开,并在终端中显示输出。

7. 检查html文件

通过上述步骤,您将看到pageContent.html已保存。

结论

此脚本会导航到用户指定的URL,获取页面的HTML并将其保存到pageContent.html文件中。使用Puppeteer-Extra和Stealth Plugin,可以有效地绕过网站的自动化检测逻辑。

希望本文有助于您了解如何使用Node.js创建爬虫。利用Puppeteer及其扩展功能,您可以实现更强大、更有效的网络爬取解决方案。

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.