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

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

7
使用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及其扩展功能,您可以实现更强大、更有效的网络爬取解决方案。

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.