使用Selenium与WebDriver实现跨浏览器自动化数据抓取

亿牛云爬虫代理

背景/引言

在数据驱动的时代,网络爬虫成为了收集和分析海量数据的关键工具。为了应对不同浏览器环境下的兼容性问题,Selenium与WebDriver成为了开发者实现跨浏览器自动化数据抓取的首选工具。本文将深入探讨如何利用Selenium和WebDriver实现跨浏览器的数据抓取,并结合代理IP技术提升数据抓取的稳定性与效率。同时,我们还将讨论如何设置user-agent和cookie以模拟真实用户行为,避免被网站检测和阻止。

正文

1. Selenium与WebDriver概述

Selenium是一个开源的自动化测试工具,广泛用于模拟用户与网页的交互。WebDriver是Selenium的一部分,支持多种浏览器(如Chrome、Firefox、Edge等)的自动化操作,使得开发者能够在不同的浏览器中执行一致的数据抓取流程。

使用Selenium的优势包括:

  • 跨浏览器兼容性:支持主流浏览器的自动化操作。
  • 强大的API:简化与页面元素的交互操作。
  • 灵活的扩展性:可以与其他库(如BeautifulSoup、pandas)结合使用。

2. 使用代理IP技术提升爬虫效率

网络爬虫常常面临IP封禁、请求频率限制等挑战。通过使用代理IP,爬虫能够在一定程度上绕过这些限制。本文将使用亿牛云爬虫代理,具体实现过程包括代理IP的配置及其在爬虫中的使用。

代理IP的配置参数(以亿牛云爬虫代理为例):
  • 域名:proxy.16yun.cn
  • 端口:12345
  • 用户名:your_username
  • 密码:your_password

3. 设置user-agent与cookie

设置user-agent可以使请求看起来像是由真实用户发出的,而不是脚本或爬虫。cookie则有助于保存用户会话信息,在爬取需要登录的网站时非常有用。

4. 实现跨浏览器自动化抓取的代码

以下为使用Selenium与WebDriver实现的跨浏览器数据抓取代码,结合代理IP、user-agent和cookie的设置。

import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType# 设置代理IP信息 亿牛云爬虫代理 www.16yun.cn
proxy_ip = "proxy.16yun.cn:12345"
proxy = Proxy({'proxyType': ProxyType.MANUAL,'httpProxy': proxy_ip,'sslProxy': proxy_ip,'ftpProxy': proxy_ip,'noProxy': ''  # 对哪些地址不使用代理
})# Chrome浏览器选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
chrome_options.add_argument(f"--proxy-server={proxy_ip}")  # 代理服务器设置
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")  # 设置user-agent
chrome_options.add_argument("--disable-blink-features=AutomationControlled")  # 防止被识别为自动化工具# 初始化WebDriver
driver = webdriver.Chrome(options=chrome_options)# 设置Cookie
cookie = {'name': 'sessionid','value': 'your_cookie_value','domain': '.51job.com'  # 设置cookie的域为51job
}# 打开51job网站
driver.get('https://www.51job.com')
driver.add_cookie(cookie)  # 添加cookie
driver.refresh()  # 刷新页面以使cookie生效# 创建存储简历信息的目录
if not os.path.exists("resumes"):os.makedirs("resumes")# 数据抓取和分类存储过程
try:# 示例XPath:根据实际页面布局调整XPath,以下XPath仅为演示目的elements = driver.find_elements(By.XPATH, '//div[@class="el"]')# 遍历每条招聘信息并抓取相关个人信息for index, element in enumerate(elements):# 提取个人信息数据:假设页面上包含姓名、职位、公司、工作地点等信息name = element.find_element(By.XPATH, './/p[@class="t1"]/span/a').text  # 姓名position = element.find_element(By.XPATH, './/span[@class="t2"]').text  # 职位company = element.find_element(By.XPATH, './/span[@class="t3"]').text  # 公司location = element.find_element(By.XPATH, './/span[@class="t4"]').text  # 工作地点# 存储到文件resume_file = f"resumes/resume_{index+1}.txt"with open(resume_file, 'w', encoding='utf-8') as f:f.write(f"姓名: {name}\n")f.write(f"职位: {position}\n")f.write(f"公司: {company}\n")f.write(f"工作地点: {location}\n")print(f"已存储简历信息到文件: {resume_file}")except Exception as e:print(f"抓取失败: {e}")
finally:# 关闭浏览器driver.quit()# 提示:代理IP可组合为http://username:password@proxy.16yun.cn:12345使用
代码解读:
  1. 代理IP设置:通过代理参数将亿牛云爬虫代理集成到WebDriver的请求中。此代理会将所有HTTP、HTTPS请求都通过代理服务器发出。
  2. user-agent设置:模拟一个真实的浏览器请求,避免被目标网站识别为爬虫。
  3. cookie设置:通过driver.add_cookie()方法向目标网页添加cookie,以便保持登录状态或其他会话信息。
  4. 跨浏览器支持:通过Selenium的WebDriver API,该代码可轻松适配到其他浏览器如Firefox或Edge,只需更改对应的驱动和选项设置。

5. 结论

通过Selenium与WebDriver,我们能够轻松实现跨浏览器的数据抓取,并通过使用代理IP、设置user-agent与cookie等技术,提升了爬虫的稳定性和隐蔽性。在实际应用中,合理配置这些参数能够有效减少爬虫被封禁的风险,并提升数据抓取效率。代理IP的选择至关重要,本文使用的亿牛云爬虫代理为爬虫提供了可靠的解决方案。在实际项目中,可根据目标网站的防护措施调整相关设置,进一步优化抓取策略。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis主从数据同步过程:命令传播、部分重同步、复制偏移量等

请记住胡广一句话,所有的中间件所有的框架都是建立在基础之上,数据结构,计算机网络,计算机原理大伙一定得看透!!~ 1. Redis数据同步 1.1 数据同步过程 大家有没想过为什么Redis多机要进行数据同步&#…

视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景

在视频监控系统中,视频画面的稳定性对于确保监控效果至关重要。抖动现象是指视频画面中存在不稳定或频繁晃动的情况,这可能会影响视频的清晰度和可读性。LntonAIServer通过引入抖动检测功能,帮助用户及时发现并解决视频流中的抖动问题&#x…

计算机网络练级第一级————认识网络

目录 网络搁哪? 网络的发展史(了解) 独立模式: 网络互联: 局域网时期: 广域网时期: 什么是协议 TCP/IP五层/四层模型 用官话来说: 我自己的话来说 第一层应用层&#xff1…

erlang学习: Mnesia Erlang数据库

创建Mnesia数据库 mnesia:create_schema([node()]).在shell里输入该行代码即可创建一个mnesia数据库于当前文件夹下 编译器文件路径下同样也有 数据库表定义创建 之后是数据库表定义,打开数据库创建完成后,启动数据库,添加一些表定义&…

多路转接之poll(接口介绍,struct pollfd介绍,实现原理,实现非阻塞网络通信代码)

目录 poll 引入 介绍 函数原型 fds struct pollfd 特点 nfds timeout 取值 返回值 原理 如何实现关注多个fd? 如何确定哪个fd上有事件就绪? 如何区分事件类型? 判断某事件是否就绪的方法 代码 示例 总结 为什么说它解决了fd上限问题? 缺点 poll 引入…

大模型RAG实战|构建知识库:文档和网页的加载、转换、索引与存储

我们要开发一个生产级的系统,还需要对LlamaIndex的各个组件和技术进行深度的理解、运用和调优。本系列将会聚焦在如何让系统实用上,包括:知识库的管理,检索和查询效果的提升,使用本地化部署的模型等主题。我将会讲解相…

故障诊断迁移学习项目DDC(保姆教程)

本项目从零开始搭建深度领域混淆(Deep Domain Confusion,DDC)算法。项目包括加载CWRU轴承原始信号,信号处理、数据集制作,模型搭建,DDC域混淆算法设计、特征可视化,混淆矩阵等流程来帮助读者学习…

超级帐本(Hyperledger)

1. Hyperledger 项目 Hyperledger 下有两类项目:第一类是区块链框架项目;第二类是支持这些区块链的相关工具或模块。 在 Hyperledger 框架下,目前有 5 个区块链框架项目:Fabric、Sawtooth Lake、Iroha、Burrow 和 Indy。 在模块类下,则有 Hyp…

Spring Boot 集成 Redisson 实现消息队列

包含组件内容 RedisQueue:消息队列监听标识RedisQueueInit:Redis队列监听器RedisQueueListener:Redis消息队列监听实现RedisQueueService:Redis消息队列服务工具 代码实现 RedisQueue import java.lang.annotation.ElementTyp…

原生 iOS 引入 Flutter 报错 kernel_blob.bin 找不到

情况 在一次原生 iOS 项目中引入 Flutter 的过程中,在模拟器中运行出现报错: 未能打开文件“kernel_blob.bin”,因为它不存在。 如下图: 模拟器中一片黑 原因&解决方案 这个是因为 Flutter 的打包 iOS framework 命令中…

OCR技术视角:智能文档管理中的票据自动化识别与处理

在数字化转型的浪潮中,企业对于高效、自动化的文档管理需求日益增长。票据作为企业运营中不可或缺的部分,其识别与管理的智能化成为了提升工作效率的关键。本文将深入探讨智能文档系统中票据识别功能的原理、技术优势以及在不同行业中的应用实践&#xf…

Java、python、php、node.js版 铁路售票自动选座系统 高铁购票系统 火车订票平台(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

Mac无法安装软件怎么解决?mac安装软件提示无法验证开发者怎么办

在使用 macOS 系统时,你可能会遇到一个常见的问题:当你尝试安装或打开某些应用程序时,系统会弹出一个警告,提示“无法验证开发者”。出现这个提示导致自己无法去进行程序安装,接下来我们就来看看如何解决此问题的方法吧…

云计算实训43——部署k8s基础环境、配置内核模块、基本组件安装

一、前期系统环境准备 1、关闭防火墙与selinux [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus…

VuePress搭建个人博客(一键安装)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【第26章】Spring Cloud之Sentinel适配API Gateway

文章目录 前言一、准备1. 引入库2. 注册过滤器3. 添加配置4. 效果展示 二、基于网关的流控1. 新增流控规则2. 测试准备3. 测试结果 总结 前言 Sentinel从1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流&a…

Django + websocket 连不上

看了网上的几个简单例子,一步一步做,但无一成功。都连不上websocket。 后来按一个视频教程的操作步骤来做,成功了。差别在于视频教程中加了 pip install daphne 和setting.py中 连不上的表现: 前端报错: WebSock…

Linux网络协议栈的实现

网络协议栈是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议栈(Network Stack)负责实现 TCP/IP 协议簇,处理应用程序发起的网络请求并与底层的网络硬件进行交互。本文…

[SWPUCTF 2022 新生赛]

目录 [SWPUCTF 2022 新生赛]ez_rce 什么是poc? [SWPUCTF 2022 新生赛]where_am_i [SWPUCTF 2022 新生赛]js_sign [SWPUCTF 2022 新生赛]xff ​[SWPUCTF 2022 新生赛]numgame call_user_func()函数 ::双冒号运算符 [SWPUCTF 2022 新生赛]ez_sql [SWPUCTF 2…

TortoiseGit无法安装解决方案

Win11安装TortoiseGit报错,错误码:2503,如下图: 开始-右键-Windows PowerShell(管理员)/终端 (管理员) 输入 msiexec /package 安装程序所在绝对路径, 例如 : msiexec /package D:\我的资料…