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

news2024/11/15 18:17:14

亿牛云爬虫代理

背景/引言

在数据驱动的时代,网络爬虫成为了收集和分析海量数据的关键工具。为了应对不同浏览器环境下的兼容性问题,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.coloradmin.cn/o/2117623.html

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

相关文章

客户管理太难了?你可能忽视了这些常见问题

在客户管理中,你是不是常常感到力不从心?客户信息不准确、沟通不到位、客户流失毫无预警……这些问题不仅让管理者头疼,还严重影响企业的业绩增长。客户管理看似简单,但往往隐藏着很多不易察觉的细节问题。如果你觉得客户越来越难…

什么运动耳机好用?六大技巧助力选购优质产品

​开放式蓝牙耳机现在超流行,不仅年轻人爱用,连不少上了年纪的人也喜欢在公园里散步时戴上。这些耳机无论是听歌、学习、健身还是办公,都能派上用场。到了2024年,想要挑到一款既好用又好听的开放式蓝牙耳机,得好好比较…

Vue2+JS项目升级为Vue3+TS之jquery的maphilight引入项目

本人由于想提升自己的项目开发能力,所以将就项目的vue2JavaScriptwebpack的旧技术栈升级为vue3typescriptvite的技术栈,所以遇到很多坑,以下是maphilight的解决方法。 众所周知jquery是基于JavaScript进行开发,但是已有typescript…

LiveKit的agent介绍

概念 LiveKit核心概念: Room(房间)Participant(参会人)Track(信息流追踪) Agent 架构图 ​ 订阅信息流 ​ agent交互流程 客户端操作 加入房间 房间创建方式 手动 赋予用户创建房间的…

【原创】java+springboot+mysql校园疫情管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

【JAVA开源】基于Vue和SpringBoot的图书个性化推荐系统

本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-…

[AHK] 调用函数动态生成ListBox窗口

需求背景 动态生成向导对话框,由用户选一个选项,类似做选择题。 运行效果 AHK v1 代码 if(A_ScriptFullPathA_LineFile)MsgBox % ListBox("窗口标题", "这是一个生成listbox的Demo", "a|b|c|d|",3) return ;---------…

【小沐学OpenGL】Ubuntu环境下glew的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glew简介 2、安装glew2.1 命令安装glew2.2 直接代码安装glew2.3 cmake代码安装glew 3、测试glew3.1 测试glewfreeglut3.2 测试glewglfw 结语 1、简介 1.1 OpenGL简介 Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口&#…

智能的PHP开发工具PhpStorm v2024.2全新发布——支持日志文件

PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。 立即获取PhpS…

【私活儿分享】手串珠子管理小程序,便捷查询珠子(串手链的珠子)位置

前言 之间帮客户做了个查询手串珠子位置的小程序,便于帮助客户管理众多的珠子,这个珠子就是戴在手上串起来的饰品。好了,话不多说,进入正题! 正文 小程序比较简单,采用云开发。两个页面,一个查…

Git 新手指南

Git 命令大全 Git 是目前最流行的分布式版本控制系统,用于跟踪文件的更改,协调不同开发者的协作。掌握 Git 命令能够极大提高工作效率,尤其在软件开发过程中。本文将详细介绍 Git 的一些常用命令,帮助你更好地理解和使用 Git。 1…

一款免费开源的截图软件,SETUNA截图软件

SETUNA是一款功能强大且便捷的屏幕截图工具,适用于多种场景,包括日常办公、学习和游戏娱乐等。该软件的主要特点如下: 高效截图:用户可以轻松截取屏幕上的任何部分,并且支持自定义选取截图范围。图片编辑功能&#xf…

聊聊go语言channel中的一些小技巧

写在文章开头 go语言提供了各种非常方便的语法糖,使得我们实现用最少的语法做尽可能高效的事情,而本文就简单介绍如何实现非阻塞处理多个channel,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的技…

项目进度一

一.双token验证登陆/注册 1.在前端中,得到响应记录acessToken和 refreshToken ,并记录在 localStorage中,当登录之后的请求都要携带着accessToken,如果accessToken过期,就再验证一下refreshToken,如果也过期就需要重新登录&#…

亚马逊测评自养号卖家如何以低成本提高店铺产品曝光率和销量?

在跨境电商领域,随着市场日趋饱和和竞争加剧,卖家普遍面临流量低、转化率低的共同挑战。为了在这种严重的“内卷化”环境中脱颖而出,不少卖家投入了大量的资金和资源,尝试了各种站内和站外的推广方式,但往往因为缺乏成…

Vue2中使用ant-design的tab组件让他一行充满

使用tabs组件默认样式这样 想改成水平居中铺满如下: 需要改下css样式 /deep/ .ant-tabs-nav {width: 100%;& > div {width: 100%;display: flex;align-items: center;}.ant-tabs-tab {flex: 1;text-align: center;}}

Python中matplotlib-legend图例水平排列

在matplotlib中,图例是用来标识不同数据系列或不同类别的标记和颜色的标签。有时候我们希望将图例水平排列,以节省空间并使得图例更加美观。本文将介绍如何在matplotlib中实现图例的水平排列。 方法一:使用legend的loc参数 我们可以通过leg…

Android通知(Notification)的基本用法

Android通知(Notification)的基本用法 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实…

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

一、K8S基本概念 1、k8s是什么 K8S是Kubernetes的 缩写,由于k 和 s 之间有⼋个字符,所以因此得名。 Kubernetes 是⼀个可移植的、可扩展的开源平台,⽤于管理容器化 的⼯作负载和服务,可促进声 明式配置和⾃动化。 2、k8s的功…