如何通过 PhantomJS 模拟用户行为抓取动态网页内容

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 随着网页技术的进步,JavaScript 动态加载内容已成为新常态,对传统静态网页抓取提出挑战。PhantomJS 作为无头浏览器,能模拟用户行为并执行 JavaScript,成为获取动态网页内容的有效工具。本文介绍如何使用 PhantomJS 结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据,从而更高效地获取动态网页内容,支持数据收集与分析。

爬虫代理.jpg


引言

随着网页技术的不断进步,JavaScript 动态加载内容已成为网站设计的新常态,这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战,PhantomJS 作为一个无头浏览器,能够模拟用户行为并执行 JavaScript,成为了获取动态网页内容的有效工具。

大众点评作为一个提供丰富商家信息的平台,广泛采用 JavaScript 动态加载技术,这给传统的网页抓取方法带来了不小的挑战。本文将详细介绍如何通过 PhantomJS 模拟用户行为,结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据。通过这种方法,可以更高效地获取动态网页上的内容,为数据收集和分析提供支持。

正文

1. PhantomJS 简介

PhantomJS 是一个基于 WebKit 的无界面浏览器,支持网页自动化操作和 JavaScript 执行。它可以模拟用户访问页面的行为,如点击按钮、输入表单,甚至处理复杂的 JavaScript 动态内容加载。

2. 为什么选择 PhantomJS 进行动态网页抓取

  • JavaScript 执行能力:PhantomJS 可以解析并执行网页中的 JavaScript,抓取那些通过 JavaScript 动态生成的内容。
  • 无头浏览器:它不需要 GUI(图形用户界面),运行速度快,占用资源少。
  • 自动化能力:支持模拟用户行为,如点击、滚动、提交表单等。

3. 使用代理 IP 模拟请求

在实际的网页抓取过程中,使用代理IP是规避限制的重要技术手段。通过代理IP爬虫可以避免因频繁请求导致的拒绝响应。我们将使用爬虫代理服务,设置代理 IP、端口、用户名和密码进行请求。

实例

下面的代码展示了如何使用 PhantomJS 结合爬虫代理IP技术抓取动态网页内容,并模拟用户行为。

// 引入 PhantomJS 模块
var page = require('webpage').create();
var system = require('system');

// 配置代理IP信息 亿牛云爬虫代理加强版 www.16yun.cn
var proxy = "http://proxy.16yun.cn:81000"; // 域名、端口
var proxyAuth = "用户名:密码"; // 填入用户名和密码

// 配置代理IP信息及用户认证
phantom.setProxy(proxy);
phantom.setProxyAuth(proxyAuth);

// 设置 User-Agent 和 Cookie
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36';
phantom.addCookie({
   
    'name': 'session_id',
    'value': 'your_cookie_value',
    'domain': '.example.com',
    'path': '/',
    'httponly': true,
    'secure': false
});

// 打开目标网页
page.open('https://example.com/dynamic-content', function(status) {
   
    if (status !== 'success') {
   
        console.log('无法加载网页');
        phantom.exit();
    } else {
   
        // 等待动态内容加载
        window.setTimeout(function () {
   
            // 执行 JavaScript 抓取动态内容
            var content = page.evaluate(function () {
   
                return document.querySelector('.dynamic-element').innerText;
            });

            console.log('抓取到的内容: ' + content);

            // 保存截图,验证页面加载情况
            page.render('screenshot.png');

            phantom.exit();
        }, 5000); // 延时等待动态内容加载
    }
});

代码解析

  1. 代理设置:代码通过 phantom.setProxy()phantom.setProxyAuth() 设置了代理 IP 和认证信息,使用爬虫代理服务进行请求。
  2. User-Agent 设置:通过 page.settings.userAgent 模拟了一个常用的浏览器请求,避免爬虫被检测到。
  3. 大众点评店铺信息抓取
    • 店铺名称:通过 document.querySelector('.tit a h4') 获取店名。
    • 地址:通过 document.querySelector('.addr') 获取地址信息。
    • 评分:通过 document.querySelector('.comment-list .star').getAttribute('title') 获取评分。
  4. 延时等待:由于大众点评页面内容是动态加载的,因此需要设置延时 setTimeout 等待数据加载完毕再进行抓取。
  5. 输出结果:抓取到的店铺信息以 JSON 格式输出,并通过 page.render() 保存页面截图用于后续调试和验证。

结论

使用 PhantomJS 模拟用户行为抓取动态网页内容是一种有效的爬虫技术,特别是在处理 JavaScript 动态加载页面时。通过结合代理 IP、User-Agent 和 Cookie 的设置,我们可以有效避免频繁请求导致的封禁问题,并模拟更真实的用户访问行为。本文的代码展示了如何使用 PhantomJS 和爬虫代理服务抓取动态内容,实践中可以根据需要进一步调整代码实现。


引言

随着网页技术的不断进步,JavaScript 动态加载内容已成为网站设计的新常态,这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战,PhantomJS 作为一个无头浏览器,能够模拟用户行为并执行 JavaScript,成为了获取动态网页内容的有效工具。

大众点评作为一个提供丰富商家信息的平台,广泛采用 JavaScript 动态加载技术,这给传统的网页抓取方法带来了不小的挑战。本文将详细介绍如何通过 PhantomJS 模拟用户行为,结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据。通过这种方法,可以更高效地获取动态网页上的内容,为数据收集和分析提供支持。

正文

1. PhantomJS 简介

PhantomJS 是一个基于 WebKit 的无界面浏览器,支持网页自动化操作和 JavaScript 执行。它可以模拟用户访问页面的行为,如点击按钮、输入表单,甚至处理复杂的 JavaScript 动态内容加载。

2. 为什么选择 PhantomJS 进行动态网页抓取

  • JavaScript 执行能力:PhantomJS 可以解析并执行网页中的 JavaScript,抓取那些通过 JavaScript 动态生成的内容。
  • 无头浏览器:它不需要 GUI(图形用户界面),运行速度快,占用资源少。
  • 自动化能力:支持模拟用户行为,如点击、滚动、提交表单等。

3. 使用代理 IP 模拟请求

在实际的网页抓取过程中,使用代理IP是规避限制的重要技术手段。通过代理IP爬虫可以避免因频繁请求导致的拒绝响应。我们将使用爬虫代理服务,设置代理 IP、端口、用户名和密码进行请求。

实例

下面的代码展示了如何使用 PhantomJS 结合爬虫代理IP技术抓取动态网页内容,并模拟用户行为。

// 引入 PhantomJS 模块
var page = require('webpage').create();
var system = require('system');

// 配置代理IP信息 亿牛云爬虫代理加强版 www.16yun.cn
var proxy = "http://proxy.16yun.cn:81000"; // 域名、端口
var proxyAuth = "用户名:密码"; // 填入用户名和密码

// 配置代理IP信息及用户认证
phantom.setProxy(proxy);
phantom.setProxyAuth(proxyAuth);

// 设置 User-Agent 和 Cookie
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36';
phantom.addCookie({
   
    'name': 'session_id',
    'value': 'your_cookie_value',
    'domain': '.example.com',
    'path': '/',
    'httponly': true,
    'secure': false
});

// 打开目标网页
page.open('https://example.com/dynamic-content', function(status) {
   
    if (status !== 'success') {
   
        console.log('无法加载网页');
        phantom.exit();
    } else {
   
        // 等待动态内容加载
        window.setTimeout(function () {
   
            // 执行 JavaScript 抓取动态内容
            var content = page.evaluate(function () {
   
                return document.querySelector('.dynamic-element').innerText;
            });

            console.log('抓取到的内容: ' + content);

            // 保存截图,验证页面加载情况
            page.render('screenshot.png');

            phantom.exit();
        }, 5000); // 延时等待动态内容加载
    }
});

代码解析

  1. 代理设置:代码通过 phantom.setProxy()phantom.setProxyAuth() 设置了代理 IP 和认证信息,使用爬虫代理服务进行请求。
  2. User-Agent 设置:通过 page.settings.userAgent 模拟了一个常用的浏览器请求,避免爬虫被检测到。
  3. 大众点评店铺信息抓取
    • 店铺名称:通过 document.querySelector('.tit a h4') 获取店名。
    • 地址:通过 document.querySelector('.addr') 获取地址信息。
    • 评分:通过 document.querySelector('.comment-list .star').getAttribute('title') 获取评分。
  4. 延时等待:由于大众点评页面内容是动态加载的,因此需要设置延时 setTimeout 等待数据加载完毕再进行抓取。
  5. 输出结果:抓取到的店铺信息以 JSON 格式输出,并通过 page.render() 保存页面截图用于后续调试和验证。

结论

使用 PhantomJS 模拟用户行为抓取动态网页内容是一种有效的爬虫技术,特别是在处理 JavaScript 动态加载页面时。通过结合代理 IP、User-Agent 和 Cookie 的设置,我们可以有效避免频繁请求导致的封禁问题,并模拟更真实的用户访问行为。本文的代码展示了如何使用 PhantomJS 和爬虫代理服务抓取动态内容,实践中可以根据需要进一步调整代码实现。

相关文章
|
6月前
|
Web App开发 安全 测试技术
网页测试
【4月更文挑战第8天】网页测试
68 1
|
6月前
|
数据采集 Web App开发 JSON
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
本文以百度为实战案例演示使用WebScraper插件抓取页面内容保存到文件中。以及WebScraper用法【2月更文挑战第1天】
440 2
浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)
|
20天前
|
数据采集 机器学习/深度学习 供应链
用Puppeteer点击与数据爬取:实现动态网页交互
本文介绍了如何使用Puppeteer和代理IP抓取51job招聘信息。Puppeteer作为强大的浏览器自动化工具,能模拟用户操作、加载动态数据,结合代理IP技术可以提高抓取成功率并避免IP封禁。文章详细阐述了招聘信息的价值和市场应用,以及大数据分析在招聘信息采集中的应用。通过具体实现步骤和示例代码,展示了如何设置代理、模拟用户操作、抓取和分析数据,为企业和求职者提供有价值的市场洞察。
用Puppeteer点击与数据爬取:实现动态网页交互
|
2月前
|
XML 前端开发 PHP
如何使用 DomCrawler 进行复杂的网页数据抓取?
如何使用 DomCrawler 进行复杂的网页数据抓取?
|
3月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
64 5
|
4月前
|
数据采集 Web App开发 JavaScript
探索Puppeteer的强大功能:抓取隐藏内容
**摘要:** 本文探讨了如何使用Puppeteer无头浏览器抓取动态网页的隐藏内容,如模拟点击、滚动、表单提交和延时加载。Puppeteer是Google维护的Node库,能自动化控制Chrome。文章还讲解了结合爬虫代理IP、User-Agent和Cookie来增强爬取的稳定性和效率,提供了相关JavaScript代码示例,展示了如何配置代理、设置User-Agent、处理Cookie以及模拟用户交互来获取隐藏信息。这些技巧对于现代网页的爬取至关重要。
155 4
探索Puppeteer的强大功能:抓取隐藏内容
|
3月前
分别利用phantomjs和slimerjs实现网页的爬取和截图代码逻辑
文章介绍了如何使用PhantomJS和SlimerJS两种工具实现网页的爬取和截图,提供了具体的代码示例和执行命令。
30 0
|
3月前
|
数据采集 网络协议 索引
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
|
前端开发
前端常规关于网页文件下载的问题
前端常规关于网页文件下载的问题
63 0
|
6月前
|
数据采集 JSON API
使用phpQuery库进行网页数据爬虫案例
使用phpQuery库进行网页数据爬虫案例