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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: **摘要:**本文探讨了如何使用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设置,可以有效提升爬取的稳定性和效率。通过上述示例代码,我们可以轻松抓取网页中的隐藏内容,为数据采集和分析提供有力支持。
相关文章
|
10月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
699 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
3月前
|
数据采集 存储 供应链
数据合并:cbind函数在网页爬取中的实用技巧
本文介绍了如何通过代理IP和多线程技术提高网页爬取效率,并使用`cbind`函数合并数据。以财经网新闻为例,展示了从指定网站下载、解析内容,到数据获取、合并及分析的完整流程。通过亿牛云爬虫代理和Python代码实现,确保高效无痕访问,最终将结果保存为CSV文件。此方法适用于大量分散数据的爬取与处理,助力经济趋势分析。
161 47
|
4月前
|
数据采集 Web App开发 监控
捕获抖音截图:如何用Puppeteer保存页面状态
随着抖音直播的兴起,实时动态和互动元素吸引了大量用户。为了捕获直播页面的实时信息,本文介绍了如何使用 Puppeteer 和代理 IP 服务,解决页面动态加载、反爬虫机制等问题,实现自动化抓取和截图保存。通过安装 Puppeteer、配置代理 IP 和编写简单脚本,可以高效地捕获抖音直播页面的状态。
208 51
|
4月前
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
4月前
|
数据采集 前端开发 JavaScript
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
本文介绍了如何使用 Puppeteer 结合 CSS 选择器抓取动态网页中的关键元素,以亚航网站的特价机票信息为例,通过设置代理 IP、User-Agent 和 Cookie 等技术手段,有效提升爬虫策略,实现高效、稳定的爬取。
165 5
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
|
4月前
|
数据采集 机器学习/深度学习 供应链
用Puppeteer点击与数据爬取:实现动态网页交互
本文介绍了如何使用Puppeteer和代理IP抓取51job招聘信息。Puppeteer作为强大的浏览器自动化工具,能模拟用户操作、加载动态数据,结合代理IP技术可以提高抓取成功率并避免IP封禁。文章详细阐述了招聘信息的价值和市场应用,以及大数据分析在招聘信息采集中的应用。通过具体实现步骤和示例代码,展示了如何设置代理、模拟用户操作、抓取和分析数据,为企业和求职者提供有价值的市场洞察。
279 1
用Puppeteer点击与数据爬取:实现动态网页交互
|
5月前
|
数据采集 Web App开发 JavaScript
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
本文介绍了如何使用Selenium爬虫技术抓取抖音评论,通过模拟鼠标悬停操作和结合代理IP、Cookie及User-Agent设置,有效应对动态内容加载和反爬机制。代码示例展示了具体实现步骤,帮助读者掌握这一实用技能。
304 0
Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容
|
6月前
|
数据采集 JSON JavaScript
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
随着网页技术的进步,JavaScript 动态加载内容已成为新常态,对传统静态网页抓取提出挑战。PhantomJS 作为无头浏览器,能模拟用户行为并执行 JavaScript,成为获取动态网页内容的有效工具。本文介绍如何使用 PhantomJS 结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据,从而更高效地获取动态网页内容,支持数据收集与分析。
438 13
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
|
5月前
|
Web App开发 前端开发 JavaScript
JavaScript动态渲染页爬取——Playwright的使用(一)
JavaScript动态渲染页爬取——Playwright的使用(一)
125 2
|
5月前
|
JavaScript 前端开发 API
JavaScript动态渲染页爬取——Playwright的使用(二)
JavaScript动态渲染页爬取——Playwright的使用(二)
210 1