探索Puppeteer的强大功能:抓取隐藏内容
创始人
2024-12-29 09:41:06
0次

亿牛云爬虫代理.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.16yun.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.type和page.click方法模拟表单输入和提交,获取隐藏内容。
  7. 延时等待:通过page.waitForTimeout方法等待特定时间后获取延时加载的内容。

结论

Puppeteer作为一个功能强大的无头浏览器工具,为我们提供了模拟用户行为、抓取动态内容的能力。结合代理IP、User-Agent和Cookie设置,可以有效提升爬取的稳定性和效率。通过上述示例代码,我们可以轻松抓取网页中的隐藏内容,为数据采集和分析提供有力支持。

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...