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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
简介: 随着网页技术的进步,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 和爬虫代理服务抓取动态内容,实践中可以根据需要进一步调整代码实现。

相关文章
|
机器学习/深度学习 缓存 人工智能
大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?
Transformer的基石自2017年后历经变革,2022年RoPE引领NLP新方向,现已被顶级模型如Llama、Llama2等采纳。RoPE融合绝对与相对位置编码优点,解决传统方法的序列长度限制和相对位置表示问题。它通过旋转矩阵对词向量应用角度与位置成正比的旋转,保持向量稳定,保留相对位置信息,适用于长序列处理,提升了模型效率和性能。RoPE的引入开启了Transformer的新篇章,推动了NLP的进展。[[1](https://avoid.overfit.cn/post/9e0d8e7687a94d1ead9aeea65bb2a129)]
1897 0
|
11月前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
482 1
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
|
存储 SQL 关系型数据库
深入MySQL锁机制:原理、死锁解决及Java防范技巧
深入MySQL锁机制:原理、死锁解决及Java防范技巧
|
负载均衡 监控 网络协议
深入理解并实现负载均衡技术
【5月更文挑战第23天】本文探讨了负载均衡技术,旨在应对互联网高并发需求。负载均衡通过分散请求至多台服务器,提升系统性能和可靠性。核心是负载均衡器,其工作流程包括接收请求、解析、选择服务器、转发及返回响应。负载均衡技术分类包括反向代理(如Nginx、HAProxy)、DNS、IP(如LVS)和应用层负载均衡。实现时,以Nginx为例,需安装、配置反向代理、分发策略并启动服务。监控和优化是持续过程。负载均衡技术将持续发展,适应云计算和大数据时代。
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
Tokenformer:基于参数标记化的高效可扩展Transformer架构
本文是对发表于arXiv的论文 "TOKENFORMER: RETHINKING TRANSFORMER SCALING WITH TOKENIZED MODEL PARAMETERS" 的深入解读与扩展分析。主要探讨了一种革新性的Transformer架构设计方案,该方案通过参数标记化实现了模型的高效扩展和计算优化。
559 0
|
SQL 存储 安全
SQL安全深度剖析:守护数据安全的坚固防线
展望未来,随着技术的不断进步和攻击手段的不断翻新,SQL安全将面临更多的挑战。因此,我们需要持续关注SQL安全领域的最新动态和技术发展,并不断更新和完善我们的防护措施。同时,加强国际合作与信息共享也是提升全球SQL安全性的重要途径。让我们共同努力,为构建一个更加安全、可靠的数字化环境而奋斗。
|
人工智能 自然语言处理 搜索推荐
谈谈我对 AIGC 趋势下软件工程重塑的理解
本文探讨了AIGC(人工智能生成内容)趋势下软件工程的重塑。作者指出,AI 已经成为软件研发的必需品,因为它可以显著提升开发者的效率。
90048 14
|
SQL NoSQL 前端开发
MySQL 连接数过多的处理方法合集 - Too many connections - 卡拉云
碰到`Can not connect to MySQL server. Too many connections”-mysql`错误着实令人抓狂。这基本等于失去了对 MySQL 的控制权。本教程将详细讲解多种处理此错误的方法。 sudo mysql -uroot -p ERROR 1040 (00000): Too many connections
23224 1
|
安全 中间件 C++
【C++运算符重载】运算符重载的艺术与实践:何时使用以及使用示例
【C++运算符重载】运算符重载的艺术与实践:何时使用以及使用示例
329 5