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

news2024/11/16 21:51:52

爬虫代理


引言

随着网页技术的不断进步,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 和爬虫代理服务抓取动态内容,实践中可以根据需要进一步调整代码实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索数据结构:初入算法之经典排序算法

🔑🔑博客主页:阿客不是客 🍓🍓系列专栏:渐入佳境之数据结构与算法 欢迎来到泊舟小课堂 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 一、插入排序 步骤: 从第一个元素开…

OpenAI 刚刚推出 o1 大模型!!突破LLM极限

北京时间 9 月 13 日午夜,OpenAI 正式发布了一系列全新的 AI 大模型,专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破,其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型,能够解决比之前更难的…

Python和R均方根误差平均绝对误差算法模型

🎯要点 回归模型误差评估指标归一化均方根误差生态状态指标神经网络成本误差计算气体排放气候算法模型 Python误差指标 均方根误差和平均绝对误差 均方根偏差或均方根误差是两个密切相关且经常使用的度量值之一,用于衡量真实值或预测值与观测值或估…

HarmonyOS开发实战( Beta5.0)骨架屏实现案例实践

鸿蒙HarmonyOS开发往期必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 介绍 本示例介绍通过骨架屏提升加载时用户体验的方法。骨架屏用…

无法加载用户配置文件怎么解决?

你有没有遇到过这种问题,蓝屏提示“User Profile Services服务登录失败。无法加载用户配置文件”。为什么会出现问题呢?可能的原因包括: 用户配置文件损坏:用户的配置文件可能已损坏,导致系统无法读取。 权限问题&…

linux更换阿里镜像源

第一步:进入 /etc/yum.repos.d目录下 cd /etc/yum.repos.d 第二步:编辑 CentOS-Base.repo 打开该文件 vi CentOS-Base.repo 第三步:点击键盘i,进入编辑模式 删除文件的全部内容:将阿里下面配置复制粘贴进取 [base] nam…

Ribbon (WPF)

Ribbon (WPF) 在本文中主要包含以下内容: Ribbon组件和功能应用程序菜单快速访问工具栏增强的工具提示 Ribbon是一个命令栏,它将应用程序的功能组织到应用程序窗口顶部的一系列选项卡中。Ribbon用户界面(UI)增加了特性和功能的可发现性,使用…

神经网络学习笔记——如何设计、实现并训练一个标准的前馈神经网络

1.从零设计并训练一个神经网络https://www.bilibili.com/video/BV134421U77t/?spm_id_from333.337.search-card.all.click&vd_source0b1f472915ac9cb9cdccb8658d6c2e69 一、如何设计、实现并训练一个标准的前馈神经网络,用于手写数字图像的分类,重…

如何制作Vector Vflash中加载的DLL文件--自动解锁刷写过程中27服务

案例背景: vFlash 是一种易于使用的工具,用于对一个或多个 ECU 进行刷写软件。由于方法灵活,它可以支持各种汽车原始设备制造商的不同刷写规范。它支持通过 CAN、CAN FD、FlexRay、LIN、以太网/DoIP 和以太网/SoAd 对 ECU 进行刷写。 vFlas…

SpringSecurity原理解析(六):SecurityConfigurer 解析

1、SecurityConfigurer SecurityConfigurer 在 Spring Security 中是一个非常重要的接口,观察HttpSecurity 中的很多 方法可以发现,SpringSecurity 中的每一个过滤器都是通过 xxxConfigurer 来进行配置的,而 这些 xxxConfigurer 其实都是 Sec…

针对Docker容器的可视化管理工具—DockerUI

目录 ⛳️推荐 前言 1. 安装部署DockerUI 2. 安装cpolar内网穿透 3. 配置DockerUI公网访问地址 4. 公网远程访问DockerUI 5. 固定DockerUI公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

GBI(生成式商业智能)实际业务生产落地运用上的探索和实践

前言 最近在探索如何发展AI在业务上的驱动力时了解到了生成式商业智能这一概念,同时本人也在探索ChatBI这一技术的实际落地运用,其实二者几乎在实现效果层面是一个意思,GBI(Generative Business Intelligence)是偏向业务方面,而C…

[000-01-008].第05节:OpenFeign高级特性-超时控制

我的后端学习大纲 SpringCloud学习大纲 1.1.OpenFeign超时的情况: 在Spring Cloud微服务架构中,大部分公司都是利用OpenFeign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂&#xff…

UiBot教程:实现复杂流程图的高效方法

在自动化测试和RPA(机器人流程自动化)领域,使用UiBot绘制复杂流程图是日常工作中常见的挑战之一。如何在繁杂的逻辑中保持高效?如何实现复杂流程的自动化设计而不迷失于其中?这是许多测试工程师和自动化开发者所面临的…

区块链之变:揭秘Web3对互联网的改变

传统游戏中,玩家的虚拟资产(如角色、装备)通常由游戏公司控制,玩家无法真正拥有这些资产或进行交易。而在区块链游戏中,虚拟资产通过去中心化技术记录在区块链上,玩家对其拥有完全的所有权,并能…

Loki 分布式日志中心服务

目录 Loki 是什么 Loki 配置文件介绍 Loki 安装 Promtail 配置文件介绍 Promtail 安装 Loki 整合 Grafana Loki 是什么 Loki 是一个专为日志聚合和查询设计的开源分布式日志管理系统,由 Grafana Labs 开发。它与 Prometheus 类似,但用于处理日志&a…

决策树实战

文章目录 一、入门基础案例二、基于sklearn的决策树模型2.1sklearn中的决策树实现2.2分类型决策树:DecisionTreeClassifier2.2.1重要参数2.2.2重要属性与接口2.2.3基本案例:wine葡萄酒数据集 2.3回归型决策树:DecisionTreeRegressor2.3.1重要…

大学选修课无人机航拍技术与技巧怎么样?

在当今这个视觉盛行的时代,无人机航拍技术以其独特的视角和非凡的创意能力,正逐步成为影视制作、新闻报道、地理测绘、环境监测及个人记录生活等领域不可或缺的工具。为此,本大学特设《无人机航拍技术与技巧》选修课,旨在通过系统…

Linux数据相关-第3个服务-实时同步sersync

1、实时同步 背景: 之前我们通过rsync 定时任务实现定时备份/同步对于NFS我们需要进行实时同步 选择 分布式存储.。使用实时同步服务NFS。选择公有云对象存储,七牛存储,腾讯存储COS 选择:nfs实时同步工具 inotify(bug需要书…

3D点云目标检测数据集标注工具 保姆级教程——CVAT (附json转kitti代码)

前言: 笔者尝试过很多3D标注软件都遇到很多问题,例如CloudCompare不适合做3D目标检测的数据集而且分割地面的时很繁琐;labelCloud没有三视图,视角难以调整标得不够精确;SUSTechPOINTS换帧麻烦、输出时存储在docker里面…