探索Puppeteer的强大功能:抓取隐藏内容

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: **摘要:**本文探讨了如何使用Puppeteer无头浏览器抓取动态网页的隐藏内容,如模拟点击、滚动、表单提交和延时加载。Puppeteer是Google维护的Node库,能自动化控制Chrome。文章还讲解了结合爬虫代理IP、User-Agent和Cookie来增强爬取的稳定性和效率,提供了相关JavaScript代码示例,展示了如何配置代理、设置User-Agent、处理Cookie以及模拟用户交互来获取隐藏信息。这些技巧对于现代网页的爬取至关重要。

爬虫代理.png

背景/引言

在现代网页设计中,动态内容和隐藏元素的使用越来越普遍,这些内容往往只有在特定的用户交互或条件下才会显示出来。为了有效地获取这些隐藏内容,传统的静态爬虫技术往往力不从心。Puppeteer,作为一个强大的无头浏览器工具,提供了丰富的功能来模拟用户行为,从而轻松抓取这些动态内容。本文将介绍如何使用Puppeteer抓取网页中的隐藏内容,并结合爬虫代理IP、useragent、cookie等设置,确保爬取过程的稳定性和高效性。

正文

Puppeteer介绍

Puppeteer是一个由Google维护的Node库,它提供了一个高层次的API来控制Chrome或Chromium浏览器。通过Puppeteer,我们可以自动执行诸如表单提交、UI测试、键盘输入等操作。它特别适用于处理JavaScript渲染的动态网页和隐藏元素。

抓取隐藏内容的几种方式

在实际应用中,隐藏内容可能是通过点击按钮、滚动页面等操作后才会显示。Puppeteer允许我们模拟这些用户操作,从而获取隐藏的内容。下面将介绍几种常见的抓取隐藏内容的方法。

1. 模拟点击操作

有些隐藏内容需要通过点击按钮或链接来显示。例如,一个“显示更多”按钮可能会加载更多的内容。

await page.click('#showHiddenContentButton');
await page.waitForSelector('#hiddenContent', {
   
    visible: true });
const hiddenContent = await page.evaluate(() => document.querySelector('#hiddenContent').innerText);
console.log('隐藏内容:', hiddenContent);

2. 滚动页面加载内容

某些页面通过滚动加载更多内容,比如无限滚动的社交媒体页面。在这种情况下,我们可以模拟滚动操作。

await page.evaluate(async () => {
   
   
    for (let i = 0; i < 10; i++) {
   
   
        window.scrollBy(0, window.innerHeight);
        await new Promise(resolve => setTimeout(resolve, 1000));
    }
});
const content = await page.content();
console.log('滚动加载的内容:', content);

3. 表单提交

有些隐藏内容需要通过表单提交来触发。例如,输入搜索关键词并点击搜索按钮。

await page.type('#searchInput', 'Puppeteer');
await page.click('#searchButton');
await page.waitForSelector('#searchResults', {
   
    visible: true });
const searchResults = await page.evaluate(() => document.querySelector('#searchResults').innerText);
console.log('搜索结果:', searchResults);

4. 等待特定时间

有些内容可能需要等待一段时间后才会加载,这时可以使用延时等待的方法。

await page.waitForTimeout(5000); // 等待5秒钟
const delayedContent = await page.evaluate(() => document.querySelector('#delayedContent').innerText);
console.log('延时加载的内容:', delayedContent);

使用爬虫代理IP、User-Agent和Cookie设置

在爬取过程中,使用爬虫代理IP、User-Agent和Cookie可以有效避免被网站封禁,提高爬取的稳定性和效率。

实例代码

以下是一个综合实例代码,展示如何使用Puppeteer抓取隐藏内容,并结合亿牛云爬虫代理、User-Agent和Cookie设置。

const puppeteer = require('puppeteer');

(async () => {
   
   
    // 使用爬虫代理IP的配置 亿牛云爬虫代理标准版
    const proxy = {
   
   
        host: 'www.host.cn', // 代理服务器地址
        port: 12345, // 代理服务器端口
        username: 'your_username', // 代理服务器用户名
        password: 'your_password' // 代理服务器密码
    };

    // 启动浏览器,并配置代理和useragent
    const browser = await puppeteer.launch({
   
   
        args: [
            `--proxy-server=${
     
     proxy.host}:${
     
     proxy.port}`
        ]
    });

    const page = await browser.newPage();

    // 设置User-Agent
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

    // 设置Cookie
    await page.setCookie({
   
   
        name: 'example_cookie',
        value: 'example_value',
        domain: 'example.com'
    });

    // 代理服务器身份验证
    await page.authenticate({
   
   
        username: proxy.username,
        password: proxy.password
    });

    // 打开目标网页
    await page.goto('https://example.com');

    // 模拟点击操作以显示隐藏元素
    await page.click('#showHiddenContentButton');

    // 等待隐藏元素加载并显示
    await page.waitForSelector('#hiddenContent', {
   
    visible: true });

    // 获取隐藏元素的内容
    const hiddenContent = await page.evaluate(() => document.querySelector('#hiddenContent').innerText);
    console.log('隐藏内容:', hiddenContent);

    // 模拟滚动操作以加载更多内容
    await page.evaluate(async () => {
   
   
        for (let i = 0; i < 10; i++) {
   
   
            window.scrollBy(0, window.innerHeight);
            await new Promise(resolve => setTimeout(resolve, 1000));
        }
    });

    // 获取滚动加载的内容
    const content = await page.content();
    console.log('滚动加载的内容:', content);

    // 模拟表单提交以获取隐藏内容
    await page.type('#searchInput', 'Puppeteer');
    await page.click('#searchButton');
    await page.waitForSelector('#searchResults', {
   
    visible: true });
    const searchResults = await page.evaluate(() => document.querySelector('#searchResults').innerText);
    console.log('搜索结果:', searchResults);

    // 等待特定时间后获取内容
    await page.waitForTimeout(5000); // 等待5秒钟
    const delayedContent = await page.evaluate(() => document.querySelector('#delayedContent').innerText);
    console.log('延时加载的内容:', delayedContent);

    await browser.close();
})();

代码解析

  1. 爬虫代理IP配置:通过puppeteer.launch方法中的args参数配置代理服务器地址和端口。使用page.authenticate方法进行代理服务器的身份验证。
  2. User-Agent设置:通过page.setUserAgent方法设置自定义的User-Agent字符串,模拟真实浏览器访问。
  3. Cookie设置:通过page.setCookie方法设置自定义的Cookie,模拟已登录状态或其他特定用户状态。
  4. 模拟用户操作:通过page.click方法模拟用户点击操作,显示隐藏内容。通过page.waitForSelector方法等待隐藏元素加载并显示。
  5. 滚动操作:通过page.evaluate方法模拟滚动操作,加载更多内容。
  6. 表单提交:通过page.typepage.click方法模拟表单输入和提交,获取隐藏内容。
  7. 延时等待:通过page.waitForTimeout方法等待特定时间后获取延时加载的内容。

    结论

    Puppeteer作为一个功能强大的无头浏览器工具,为我们提供了模拟用户行为、抓取动态内容的能力。结合代理IP、User-Agent和Cookie设置,可以有效提升爬取的稳定性和效率。通过上述示例代码,我们可以轻松抓取网页中的隐藏内容,为数据采集和分析提供有力支持。
相关文章
|
4月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
366 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
6天前
|
数据采集 JSON JavaScript
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
随着网页技术的进步,JavaScript 动态加载内容已成为新常态,对传统静态网页抓取提出挑战。PhantomJS 作为无头浏览器,能模拟用户行为并执行 JavaScript,成为获取动态网页内容的有效工具。本文介绍如何使用 PhantomJS 结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据,从而更高效地获取动态网页内容,支持数据收集与分析。
34 13
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
|
21天前
分别利用phantomjs和slimerjs实现网页的爬取和截图代码逻辑
文章介绍了如何使用PhantomJS和SlimerJS两种工具实现网页的爬取和截图,提供了具体的代码示例和执行命令。
25 0
|
1月前
|
存储 PHP Windows
Typecho——非插件方式实现评论显示系统信息和浏览器信息
Typecho——非插件方式实现评论显示系统信息和浏览器信息
24 0
|
前端开发
前端常规关于网页文件下载的问题
前端常规关于网页文件下载的问题
54 0
|
数据采集 JavaScript 前端开发
动态内容抓取指南:使用Scrapy-Selenium和代理实现滚动抓取
在传统的网络爬虫中,静态网页内容很容易抓取,但对于通过JavaScript加载的动态内容,通常需要借助浏览器进行模拟访问。Scrapy-Selenium是一款结合了Scrapy和Selenium功能的库,可以实现模拟浏览器行为,从而实现抓取动态内容的目的。
291 0
动态内容抓取指南:使用Scrapy-Selenium和代理实现滚动抓取
|
开发框架 安全 .NET
您是否也有想在浏览器中实时的编辑代码并且渲染的想法?
您是否也有想在浏览器中实时的编辑代码并且渲染的想法?
72 0
vba 在网页中抓取指定内容
vba 在网页中抓取指定内容
79 0
Python实现自动访问网页
Python实现自动访问网页
|
数据采集 编解码 移动开发
Puppeteer + Nodejs 通用全屏网页截图方案(二)常用参数实现
学习如何对网页截图程序设计基本参数功能。