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

news2024/11/24 16:22:32

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏: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.coloradmin.cn/o/1606449.html

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

相关文章

windows docker desktop==spark环境搭建

编写文件docker-compose.yml version: 3services:spark-master:image: bde2020/spark-master:3.1.1-hadoop3.2container_name: spark-masterports:- "8080:8080"- "7077:7077"- "2220:22"volumes:- F:\spark-data\m1:/dataenvironment:- INIT_D…

HiveSql中的函数家族(二)

一、窗口函数 1、什么是窗口函数 在 SQL 中&#xff0c;窗口函数&#xff08;Window Functions&#xff09;是一种特殊的函数&#xff0c;它允许在查询结果集的特定窗口&#xff08;通常是一组行&#xff09;上执行聚合、分析和计算操作&#xff0c;而无需聚合整个结果集。窗口…

Linux 2.进程(守护进程)

守护进程 何谓守护进程常见守护进程进程查看命令pskill命令编写简单守护进程守护进程的父进程 何谓守护进程 daemon&#xff0c;表示守护进程&#xff0c;简称为d&#xff08;进程名后面带d的基本就是守护进程&#xff09; 长期运行&#xff08;一般是开机运行直到关机时关闭&…

Flask项目在Pycharm中设置局域网访问

打开PyCharm导入本应用。点击Run标签中的Edit Configurations 其中Target type选择Script path&#xff0c;Target填入本项目中app.py的路径&#xff0c;Additional optional填入--host0.0.0.0(不要有空格)。 再重新运行项目&#xff0c;会观察到除了原本的http://127.0.0.1:50…

java在线问卷调查系统的设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线问卷调查系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于java的在线问卷调查…

函数 基础知识

本笔记为观看 50 函数-函数的定义_哔哩哔哩_bilibili的学习笔记 1 函数概述 作用:将一段经常使用的代码封装起来&#xff0c;减少重复代码一个较大的程序&#xff0c;一般分为若干个程序块&#xff0c;每个块实现特定的功能。 2 函数的定义 eg: int max(int a,int b); {retu…

社交媒体数据恢复:钉钉

在数字化办公日益普及的今天&#xff0c;钉钉作为一款综合性的企业级通讯工具&#xff0c;已经深入到众多企业和个人的工作与生活中。然而&#xff0c;在日常使用过程中&#xff0c;我们难免会遇到一些意外情况导致数据丢失的问题。本文将针对钉钉数据恢复这一主题&#xff0c;…

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流 整体流程1.下载所需文件1. 1下载rtsp推流服务器1.2 下载ffmpeg2. 开启RTSP服务器3. opencv 读取摄像头并调用ffmpeg进行推流4. opencv进行拉流整体流程 1.下载所需文件 1. 1下载rtsp推流服务器 下载 RTSP服务器 下…

pyqt+opencv+常用图像算法可视化[资源介绍]

包含的算法&#xff1a; 均值滤波高斯滤波中值滤波Sobel边缘检测Laplacian边缘检测Canny边缘检测膨胀腐蚀灰度化直方图均衡化 包含的功能&#xff1a; 从文件中打开图片返回上一张处理后的图像保存处理后的图像文件退出系统 系统界面&#xff1a; 见我的资源&#xff0c;ht…

大型网站系统架构演化实例_3.使用服务集群改善网站并发处理能力

1.使用服务集群改善网站并发处理能力 使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时&#xff0c;不要企图去更换更强大的服务器&#xff0c;对大型网站而言&#xff0c;不管多么强大的服务器&#xff0c;对大型网站而言&…

数字零售力航母-看微软如何重塑媒体

数字零售力航母-看微软如何重塑媒体 - 从2024全美广播协会展会看微软如何整合营销媒体AI技术和AI平台公司 2024年&#xff0c;微软公司联合英伟达总司&#xff0c;赞助全美广播协会展会。本次展会微软通过搭建一个由全面的合作伙伴生态系统支持的可信和安全的平台&#xff0c;…

什么是301重定向,什么时候应该使用?301重定向详细说明

如果您将网站从一个URL移动到另一个URL&#xff0c;您需要采取必要的步骤来确保您的访问者被发送到正确的位置。在技术领域&#xff0c;这被称为301重定向。 在这里&#xff0c;我们将讨论什么是301重定向&#xff0c;何时需要使用&#xff0c;以及如何在网站或WordPress中重定…

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化)

【云计算】云计算八股与云开发核心技术&#xff08;虚拟化、分布式、容器化&#xff09; 文章目录 一、什么是云计算&#xff1f;1、云计算的架构&#xff08;基础设施&#xff0c;平台&#xff0c;软件&#xff09;2、云计算的发展 二、如何做云计算开发&#xff1f;云计算的核…

第十五届蓝桥杯复盘python大学A组——试题C 数字诗意

思路 数字可以分为 有诗意的数字可以写成 (ij)(j-i1)/2 &#xff08; i、j都是正整数 &#xff09; ij 、j-i1 的奇偶性不同&#xff08;因为i、j都是正整数&#xff09; 因此&#xff0c; 如果一个数是奇数就一定有诗意 eg.312 ,523,734,945… 原因&#xff1a;根据上述分…

PCIe错误报告机制

1 PCIe两种错误报告机制 Baseline Error Reporting (基线错误报告): 这是所有PCIe设备必须支持的基本错误报告机制。基线错误报告提供了一组基本的错误检测和报告功能&#xff0c;它包括的功能有&#xff1a; 错误检测&#xff1a;能够检测到不同类型的错误&#xff0c;例如数…

OpenCV从入门到精通实战(四)——答题卡识别判卷系统

基于OpenCV的答题卡识别系统&#xff0c;其主要功能是自动读取并评分答题卡上的选择题答案。系统通过图像处理和计算机视觉技术&#xff0c;自动化地完成了从读取图像到输出成绩的整个流程。下面是该系统的主要步骤和实现细节的概述&#xff1a; 1. 导入必要的库 系统首先导入…

三、fpga对完成过滤和校验的有效包数据进行有效像素提取、MATLAB对数据源进行处理与下发(完整实现pc机→显示器通信链路)

前言:上篇文章实现了MATLAB模拟发送UDP以太网协议数据包到fpga,能实现双沿数据→单沿数据转换,并将转换后的数据进行包过滤和crc校验,本篇内容要实现真正的从pc机下发视频数据,经过千兆以太网传输存储到fpga 的ddr3中,然后通过hdmi读出到显示屏上。 文章目录 一、模块设…

偏微分方程算法之一阶双曲差分法

目录 一、研究目标 二、理论推导 2.1 引言 2.2 迎风格式 2.3 完全不稳定差分格式 2.4 蛙跳格式&#xff08;Leapfrog&#xff09; 2.5 Lax-Friedrichs格式 2.6 Lax-Wendroff格式 2.7 Beam-Warming格式 2.8 隐格式 2.9 Courant-Friedrichs-Lewy条件&#xff08;CFL条…

apache是什么

​Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充&#xff0c;将Perl/Python等解释器编译…

【GDAL-Python】3-在Python中使用GDAL处理数字高程模型DEM

文章目录 1-介绍1.1 主要内容1.2 坡度、坡向、山体阴影 2-代码实现2.1 数据介绍2.2 代码实现2.3 效果显示 3.参考资料3.1 使用richdem库中的TerrainAttribute计算坡度、坡向、山体阴影 1-介绍 1.1 主要内容 &#xff08;1&#xff09;教程内容&#xff1a;使用GDAL处理数字高…