当前位置: 首页 > news >正文

如何通过 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 和爬虫代理服务抓取动态内容,实践中可以根据需要进一步调整代码实现。

相关文章:

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

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

ARM驱动学习之8 动态申请字符类设备号

ARM驱动学习之8 动态申请字符类设备号 KernelCode: • 字符设备函数在文件“include/linux/fs.h”中 • alloc_chrdev_region() 是动态分配主次设备号。 • 宏定义MAJOR提取dev_t数据中的主设备号源码: /*** alloc_chrdev_region() - register a range of char dev…...

TCP.IP四层模型

一、TCP/IP模型协议分层 1、应用层: 2、传输层: TCP:传输控制协议 UDP:用户数据报协议 3、网络层: IP: 国际协议(IP地址) ICMP: 互联网控制消息协议(互联网…...

极狐GitLab DevSecOps 功能合集(七大安全功能)

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...

进阶SpringBoot之异步任务、邮件任务和定时执行任务

SpringBooot 创建 Web 项目 异步任务: service 包下创建 AsyncService 类 Async 异步方法 Thread.sleep(3000) 停止三秒,捕获异常 package com.demo.task.service;import org.springframework.scheduling.annotation.Async; import org.springfram…...

【设计模式-桥接】

定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要…...

JVM JMM 专题篇 ( 12000 字详解 )

一:JVM 简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机,虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机:JVM、VMwave、Virtual Box,JVM 和其…...

【C++】—— list 模拟实现

【C】—— list 模拟实现 1 list 基础结构2 默认构造3 迭代器3.1 整体框架3.2 成员函数3.3 begin() 与 end() 的实现3.4 operator-> 的实现3.5 const 迭代器3.5.1 const 迭代器为什么命名 const_iterator3.5.2 const 迭代器的实现3.5.3 合并两个迭代器 4 源码 1 list 基础结…...

Redis主要问题

Redis redis是单线程,基于内存操作,所以执行很快。,与网络延迟有关。 还是买早餐的例子,从早餐店买一个包子,首先早餐店得还有包子没有卖完,然后卖出,包子数量-1,重新设定早餐店包…...

vue3 ref的用法及click事件的说明

1、ref可以定义一个简单的属性,也可以是一个复杂的列表、数组等等。 2、为什么要使用 ref?简单的let个变量不行吗?const个变量不行吗? 其实这个跟vue的响应式的系统有关,官方的说明如下: 3、为 ref() 标注…...

通信工程学习:什么是HFC混合光纤同轴电缆

HFC:混合光纤同轴电缆 HFC(Hybrid Fiber Coaxial)混合光纤同轴电缆是一种结合了光纤与同轴电缆的宽带接入网技术。以下是对HFC混合光纤同轴电缆的详细解释: 一、HFC混合光纤同轴电缆的定义与概述 定义:HFC是一种结合光…...

怎么浏览URL的PDF文件呢

最近发现PDF文件网页端打开就是丑,不知道怎么办 1. 看着实在不舒服,用chorm的插件 然后原本本地用的也是2345pdf阅读器 2. 之后也下载了adobe pdf的桌面阅读器 2345打开是这个样子 这个是现在啦 如果要一些安装包什么的,评论见~ 最…...

【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)

华为校招机考的题型: 编程:软件测试工程师,算法,OD岗,三道编程题不限语言【C,Python,Java】 校招:600分 120分钟,100/200/300 社招:400分 150分钟&#xf…...

高性能缓存利器:Caffeine 在 Spring Boot 中的应用

在现代应用程序中,缓存是提高数据检索速度、减少对数据库或其他数据源访问次数的重要手段。Spring Cache 提供了多种缓存实现方式,而在我们的 Spring Boot 项目中,我们选择了 Caffeine 作为默认的缓存库。 Caffeine 简介 Caffeine 是一个基…...

pWnOS的第二种全新解法(ssh私钥破解、webmin漏洞提权)

端口 端口扫描内容请看:vulnhub(8):pWnOS(还没信息收集就已经成功打点)-CSDN博客 打点 ssh登录公钥收集 ./2017.pl 192.168.234.116 10000 /home/vmware/.ssh/authorized_keys 0 ./2017.pl 192.168.234.11…...

Maven入门学习笔记

一、maven介绍 Maven是一款自动化构建工具,专注服务于JAVA平台的项目构建和依赖管理。在javaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁。 管理jar包 当我们使用SSM之后我们就需要使用非常多的jar包 没有maven找jar包非常的麻烦。 使用maven下载…...

linux驱动开发-arm汇编基础

目录 写在前面 1、Cortex-A7 处理器有 9 种处理模式 2、Cortex-A 寄存器组 通用寄存器 1、汇编语法 2、Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令 2.1.1 传输数据操作类型 1、MOV指令 2、MRS指令 3、MSR指令 2.2、存储器访问指令 2.2.1 LDR指令 2.2.2 …...

【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新

#效果图 #思路 ##步骤: ###一、利用picker api选择1张图片 实例化选择器参数(使用new PhotoSelectOptions())实例化图片选择器 (使用newPhotoViewPicker() )调用图片选择器的select方法传入选择器参数完成图片选取获得结果 利用picker api选择1张图片 async sele…...

[数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6986 标注数量(xml文件个数):6986 标注数量(txt文件个数):6986 标注…...

基于SSM的二手交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手交易管理系统1拥有两种角色 管理员:商品管理、订单管理、充值管理、用户管理等用户:发布商品、查看闲置、充值账户、查看所有订单、发布求购信息、修…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...