python爬虫(Selenium案列)第二十四

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

兄弟姐妹们,大家好!我是喔的嘛呀今天让我们一起学习如何下载浏览器驱动和Selenium的两个案列

目录

一、下载浏览器驱动

二、模拟登录

三、爬取数据

提取电影信息


一、下载浏览器驱动

使用 Selenium 需要下载相应的浏览器驱动,以便 Selenium 能够控制浏览器。不同的浏览器需要使用对应的驱动程序,例如 Chrome 需要 chromedriver,Firefox 需要 geckodriver。

以下是下载浏览器驱动的一般步骤:

我用的谷歌浏览器,我就以谷歌浏览器为例。

1、确定浏览器版本:首先确定你需要使用的浏览器版本,例如 Chrome 的版本是多少。

(1)点上面那三个点,再点设置

(2)点关于chrome就可以看见版本信息

2、下载对应版本的驱动程序:访问对应浏览器驱动的官方网站下载页面,下载对应浏览器版本的驱动程序。以下是谷歌浏览器的驱动下载页面:

Chrome for Testing availability

我下的是这个

(3)将驱动程序添加到系统 PATH:下载完成后,将驱动程序所在目录添加到系统的 PATH 环境变量中,这样 Selenium 就能找到驱动程序。

所在目录不要有中文

然后把他加到环境变量中去,就OK了。

二、模拟登录

下面会展示如何使用 Selenium 打开 Gitte 网站,模拟用户登录

1、定位要输入账号和密码的网页结构

By.ID 是 Selenium 中用于根据 HTML 元素的 id 属性来定位元素的方法。在这个例子中,'user_login' 是要定位的元素的 id 属性的值,表示用户名输入框。'user_password' 就是密码输入框通过这种方式,Selenium 可以精确地找到页面上具有特定 id 属性值的元素,从而实现对该元素的操作,比如输入文本、点击等。

2、我们需要找到value=‘登录’的input表单,需要用xpath表达式

  • //input:选择所有的 <input> 元素,不论它们在文档中的位置。
  • [@value="登 录"]:筛选出其中 value 属性值为 "登 录" 的元素。

综合起来,'//input[@value="登 录"]'这个 XPath 表达式选择了文档中 value 属性值为 "登 录" 的所有 <input> 元素。在这个特定的场景下,假设这个 XPath 表达式能够准确地定位到登录按钮元素,从而实现后续的点击操作。

3、根据上面的思路开始写代码

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

# 配置 ChromeDriver 路径
driver_path = 'G:\\chromedriver-win64\\chromedriver.exe'(我自己的路径)

# 创建 Chrome WebDriver 实例
service = Service(driver_path)
options = Options()
driver = webdriver.Chrome(service=service, options=options)

# 打开 Gitte 网站
driver.get('<https://gitee.com/login?redirect_to_url=%2F>')

# 输入用户名和密码
username_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'user_login'))
)
password_input = driver.find_element(By.ID, 'user_password')

username_input.send_keys('YourUsername')
password_input.send_keys('YourPassword')

# 提交登录表单
login_button = driver.find_element(By.XPATH, '//input[@value="登 录"]')
login_button.click()

# 等待登录成功并跳转到个人信息页面
try:
    WebDriverWait(driver, 30).until(EC.url_contains('<https://gitee.com/your_username>'))
except:
    print("登录超时或失败")

# 关闭浏览器
driver.quit()

这段代码是可以成功模拟登陆的,就是点运行之后会自己跳出来窗口自动输入你的账号密码,并自动登录

因为涉及个人信息,我这里就不演示结果了大家可以自己试试。

三、爬取数据

利用Selenium自动化翻页爬取豆瓣电影Top250的数据(("排名", "电影名称", "导演", "上映时间", "评分", "评价人数", "链接"))并保存到Excel文件中:

# 导入需要的模块
from selenium import webdriver  # 用于启动浏览器并访问网页
from selenium.webdriver.common.by import By  # 用于定位元素
from selenium.webdriver.support.ui import WebDriverWait  # 用于等待元素加载
from selenium.webdriver.support import expected_conditions as EC  # 用于设置等待条件
import xlwt  # 用于生成Excel文件
import time as tm  # 用于等待页面加载

# 保存数据到Excel文件
def save_to_excel(save_path, data_lists):
    """
    保存数据到Excel文件
    :param save_path: 保存文件的路径
    :param data_lists: 数据列表,包含要保存的数据
    """
    # 创建一个新的Excel文件
    workbook = xlwt.Workbook(encoding="utf-8")
    # 创建一个工作表
    worksheet = workbook.add_sheet("豆瓣电影Top250", cell_overwrite_ok=True)
    # 定义表头
    name_sheet = ("排名", "电影名称", "导演", "上映时间", "评分", "评价人数", "链接")
    # 写入表头数据
    for i in range(len(name_sheet)):
        worksheet.write(0, i, name_sheet[i])

    # 写入电影数据
    for i in range(len(data_lists)):
        item = data_lists[i]
        for j in range(len(item)):
            worksheet.write(i + 1, j, item[j])

    # 保存Excel文件
    workbook.save(save_path)

# 爬取豆瓣电影Top250数据
def crawl_douban_top250(url):
    """
    爬取豆瓣电影Top250数据
    :param url: 豆瓣电影Top250的网址
    :return: 包含爬取数据的列表
    """
    # 启动Chrome浏览器并打开网页
    driver = webdriver.Chrome()
    driver.get(url)

    # 保存爬取的数据
    datalists = []
    try:
        while True:
            # 等待电影条目加载完成
            WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'item')))
            # 获取电影条目列表
            items = driver.find_elements(By.CLASS_NAME, 'item')
            for item in items:
                try:
                    # 提取电影信息
                    rank = item.find_element(By.XPATH, './/em[@class=""]').text
                    title = item.find_element(By.XPATH, './/div[@class="hd"]/a/span[1]').text
                    info = item.find_element(By.XPATH, './/div[@class="bd"]/p[1]').text.split('\\n')
                    director = info[0].split('导演: ')[-1]
                    time_info = info[1].split(' / ')[0] if len(info) > 1 else ''
                    rating = item.find_element(By.XPATH, './/span[@class="rating_num"]').text
                    comment_num = item.find_element(By.XPATH, './/div[@class="star"]/span[last()]').text[:-3]
                    link = item.find_element(By.XPATH, './/div[@class="hd"]/a').get_attribute('href')
                    # 将提取的信息添加到datalists列表中
                    datalists.append([rank, title, director, time_info, rating, comment_num, link])
                except Exception as e:
                    # 输出提取失败的异常信息
                    print("Failed to extract element:", e)

            # 查找下一页按钮
            next_button = driver.find_element(By.CLASS_NAME, 'next')
            # 如果下一页按钮不可点击,则表示数据已经全部爬取完毕,退出循环
            if not next_button.is_enabled():
                break

            # 滚动到下一页按钮处并点击
            driver.execute_script("arguments[0].scrollIntoView();", next_button)
            next_button.click()
            # 等待2秒,确保页面加载完成
            tm.sleep(2)
    except Exception as e:
        # 输出异常信息
        print("An error occurred:", e)
    finally:
        # 关闭浏览器
        driver.quit()

    return datalists

if __name__ == '__main__':
    # 设置豆瓣电影Top250的URL
    url = '<https://movie.douban.com/top250>'
    # 调用爬取函数获取数据
    data_lists = crawl_douban_top250(url)
    # 保存数据到Excel文件
    save_to_excel(r'douban9_top250.xls', data_lists) //路径可以随意

提取电影信息上面有一些被挡住了,我单独抽出来:

提取电影信息

                rank = item.find_element(By.XPATH, './/em[@class=""]').text
                title = item.find_element(By.XPATH, './/div[@class="hd"]/a/span[1]').text
                info = item.find_element(By.XPATH, './/div[@class="bd"]/p[1]').text.split('\\n')
                director = info[0].split('导演: ')[-1]
                time_info = info[1].split(' / ')[0] if len(info) > 1 else ''
                rating = item.find_element(By.XPATH, './/span[@class="rating_num"]').text
                comment_num = item.find_element(By.XPATH, './/div[@class="star"]/span[last()]').text[:-3]
                link = item.find_element(By.XPATH, './/div[@class="hd"]/a').get_attribute('href')
                # 将提取的信息添加到datalists列表中
                datalists.append([rank, title, director, time_info, rating, comment_num, link])
            except Exception as e:
                # 输出提取失败的异常信息
                print("Failed to extract element:", e)

代码运行之后也会自己跳出来窗口,自己模仿人工进行翻页(应对反爬)总共有十页,到第十页的时候,等待一会手动关闭窗口。等带十秒钟左右,就会出现Excel文件。

结果展示:

总共248丢了两条,嘿嘿。

这个 Selenium我觉得还是比较难的,费了我很长时间,才爬出来了。比较菜,还得练。还有爬了一个boss直聘没爬出来。过几天再试试。

好了,今天的学习就到这里了,拜拜喽!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详细分析Python的继承和多态(附Demo)

目录 前言1. 继承2. 多态 前言 入行多年&#xff0c;对于知识点还会混淆&#xff0c;此处主要做一个详细区分 继承&#xff08;Inheritance&#xff09;: 面向对象编程中的一个重要概念&#xff0c;允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff…

工作流JBPM操作API启动实例查询任务

文章目录 8.5 启动实例8.5.1 按照key启动(不加参数)8.5.2 按照key启动(加入参数)8.5.3 启动流程实例的说明 8.6 查询任务8.6.1 查询所有未办理任务8.6.2 查询个人未办理任务8.6.3 查询个人的待办组任务 8.5 启动实例 8.5.1 按照key启动(不加参数) Test // 启动 -- 简单的启…

2024华中杯B题完整思路代码论文解析

2024华中杯B题思路论文汇总 https://www.yuque.com/u42168770/qv6z0d/xpkf6ax8udqq9lt2?singleDoc# 本文针对电子地图服务商利用车辆轨迹数据估计城市路口信号灯周期的问题,提出了一系列数学模型和算法。通过分析车辆行驶轨迹与信号灯的关联性,在不同的约束条件下,实现了对路…

谷歌量化白皮书—PTQ原理

本篇笔记摘抄的原文链接 量化方法 量化粒度 量化模拟 激活层的量化 量化硬件原理 量化范围的设置方法 基于BN的激活层量化范围设置 普通卷积 VS 深度可分离卷积 跨层均衡化 ReLU6比ReLU有什么优势 吸收高偏差、偏差校正、自适应取整 标准PTQ流程 量化模型精度的诊断和性能…

综合大实验

题目&#xff1a; 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&#xff0c;其…

LeetCode in Python 1338. Reduce Array Size to The Half (数组大小减半)

数组大小减半思路简单&#xff0c;主要是熟悉python中collections.Counter的用法&#xff0c;采用贪心策略即可。 示例&#xff1a; 图1 数组大小减半输入输出示例 代码&#xff1a; class Solution:def minSetSize(self, arr):count Counter(arr)n, ans 0, 0for i, valu…

【ESP32 手机配网教程】

【ESP32 手机配网教程】 1. 前言2. 先决条件2.1 环境配置2.2 所需零件3.3 硬件连接步骤 3. Web热点手动配网3.1. 准备工作3.2. 编译上传程序3.3. 进行手动配网 4. BLE无线配网4.1. 准备工作**4.2. 编译上传程序4.3. 使用手机APP进行无线配网 5. 总结 1. 前言 欢迎使用ESP32进行…

JVM虚拟机(十一)CPU飙高的排查方案与思路

目录 一、排查方案与思路二、总结 一、排查方案与思路 1.一般我们查看 CPU 的使用情况&#xff0c;可以使用 TOP 命令&#xff1a; top执行结果如下所示&#xff0c;这里就可以按照 CPU 使用率进行排序。 2.通过 top 命令查看后&#xff0c;可以查看是哪一个 Java 进程占用 C…

JS中的变量和数据类型及用户输入详解

源码 variate.html<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

详细分析Mysql常用函数(附Demo)

目录 前言1. 聚合函数2. 字符串函数3. 日期函数4. 条件函数5. 数值函数6. 类型转换函数 前言 由于实战中经常运用&#xff0c;索性来一个总结文 创建一个名为 employees 的表&#xff0c;包含以下字段&#xff1a; employee_id&#xff1a;员工ID&#xff0c;整数类型 first…

Redis几种常见的应用方式

1.登录认证 redis最常见的应用就是&#xff0c;登录认证把。再首次登录返回给前端token&#xff0c;把用户名和登录状态缓存到redis一段时间&#xff0c;每次其他请求进来过滤器那这token解析出来的用户名或其他关键的key值&#xff0c;再redis里面查询缓存&#xff0c;有则直…

驱动云创建保存自己的环境

驱动云创建保存自己的环境 制作镜像方法一方法二报错 上一篇link介绍了如何在驱动云上部署llama2以及驱动云在训练大模型的方便之处。也说到了可以直接使用驱动云现有的环境&#xff0c;免得自己配置环境。 但是有的时候免不了自己想要安装一些包。 驱动云的环境是这样的&…

华为手机p70即将上市,国内手机市场或迎来新局面?

4月15日&#xff0c;华为官宣手机品牌全新升级&#xff0c;p系列品牌升级为Pura。华为P70系列手机预计将于2024年第一季度末发布&#xff0c;而网友也纷纷表示期待p70在拍照、性能上的全新突破。 网友们对华为P70系列的热情高涨&#xff0c;也印证了国内高端手机市场的潜力巨大…

遥感图像分割 | 基于一种类似UNet的Transformer算法实现遥感城市场景图像的语义分割_适用于卫星图像+航空图像+无人机图像

项目应用场景 面向遥感城市场景图像语义分割场景&#xff0c;项目采用类似 UNet 的 Transformer 深度学习算法来实现&#xff0c;项目适用于卫星图像、航空图像、无人机图像等。 项目效果 项目细节 > 具体参见项目 README.md (1) 安装依赖 conda create -n airs python3.8…

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测(Matlab实现)

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测&#xff08;Matlab实现&#xff09; 目录 【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测&#xff08;Matlab实现&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 差异创意搜索算法&…

Flask 解决指定端口无法生效问题

问题重现 手动指定的IP端口是app.run(host0.0.0.0, port9304)&#xff0c;但是启动的地址显示的却是http://127.0.0.1:5000。 if __name__ __main__:app.run(host0.0.0.0, port9304)启动地址如下&#xff1a; 解决方案 PyCharm会自动识别出来flask项目&#xff08;即使你…

24位AD分辨率、256Ksps*16通道国产数据采集卡、uV级采集、支持IEPE

24位AD分辨率、256Ksps*16通道、uV级采集、USB数据传输、支持IEPE、C、LABVIEW、MATLAB、Python等多编程语言&#xff0c;提供例程&#xff0c;支持二次开发。 XM7016-以太网采集卡 XM7016是一款以太网型高速数据采集卡&#xff0c;具有16通道真差分输入&#xff0c;24位分辨率…

互联网技术底蕴探究 | 联网通信原理精析与网络协议通信机制

联网通信原理精析与网络协议入门导览 前提介绍网络网络结构与节点网络应用Sun公司的Jini技术 网络设备网卡&#xff08;Netword Card&#xff09;以太网卡 路由器&#xff08;Router&#xff09;处理数据模式安全控制访问 集线器&#xff08;Hub&#xff09;网关&#xff08;Ga…

CSS的语法规则——基础选择器

元素&#xff1a; 用法&#xff1a; 标签名&#xff1a;{style的内容} 特点&#xff1a; 全局性&#xff0c;使用后&#xff0c;所有的相同标签都是同一种样式。 举例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UT…

【Linux冯诺依曼体系结构】

目录 1.冯诺依曼体系结构原理 1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元&#…
最新文章