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

embedded/2024/11/9 5:00:10/

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏: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=""]').texttitle = item.find_element(By.XPATH, './/div[@class="hd"]/a/span[1]').textinfo = 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"]').textcomment_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 datalistsif __name__ == '__main__':# 设置豆瓣电影Top250的URLurl = '<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=""]').texttitle = item.find_element(By.XPATH, './/div[@class="hd"]/a/span[1]').textinfo = 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"]').textcomment_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.ppmy.cn/embedded/23852.html

相关文章

怎样实现由.ui文件生成的.py文件的逻辑分离?

使用Qt5实现由PyQtDesigner生成的.ui.py文件的逻辑分离的过程可以使用以下步骤&#xff1a; 将通过PyQtDesigner生成的.ui文件转换为.py文件。可以使用命令行工具pyuic5来实现这一步骤。运行命令pyuic5 input.ui -o output.py&#xff0c;其中input.ui是原始的.ui文件的路径&am…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx&#xff0c;选择【File】->【New Project】&#xff0c;进入芯片选择界面&#xff0c;搜索到蓝桥杯官方的芯片型号&#xff0c;并点击收藏&#xff0c;下次直接点击收藏就…

前端开发攻略---用原生JS在网页中也能实现语音识别

1、语音识别的过程 语音识别涉及三个过程&#xff1a;首先&#xff0c;需要设备的麦克风接收这段语音&#xff1b;其次&#xff0c;语音识别服务器会根据一系列语法 (基本上&#xff0c;语法是你希望在具体的应用中能够识别出来的词汇) 来检查这段语音&#xff1b;最后&#xf…

笛卡尔树 ← AcWing 4279

【题目来源】https://www.acwing.com/problem/content/4282/【题目描述】 笛卡尔树是由一系列不同数字构成的二叉树。笛卡尔树满足堆的性质&#xff0c;笛卡尔树的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。 例如&#xff0c;给定序列 {8,…

【Oracle】常用命令汇总

本文基于黑马程序员文档做的二次总结&#xff0c;如有侵权&#xff0c;请联系本人删除。 字段定义 创建表空间 create tablespace waterboss datafile c:\waterboss.dbf size 100m autoextend on next 10m;waterboss 为表空间名称 datafile 用于设置物理文件名称 size 用于设…

Mysql如何查询不需要Group by的字段

问题背景 在实际业务场景中&#xff0c;我们有时会对某些字段进行分组统计&#xff0c;并且需要查出多余字段展示。比方说根据机构id统计每个机构下有多少部门&#xff0c;字段展示机构名称、部门数量、机构id。 这时会提示查询的字段必须得在group by子句中&#xff0c;否则无…

day17-day20_项目实战项目部署

万信金融 项目部署 目标&#xff1a; 理解DevOps概念 能够使用Docker Compose部署项目 理解持续集成的作用 会使用Jenkins进行持续集成 1 DevOps介绍 1.1 什么是DevOps DevOps是Development和Operations两个词的缩写&#xff0c;引用百度百科的定义&#xff1a; DevOps…

Centos编译安装python3.9

Centos编译安装python3.9 2024年4月24日, 当前Linux环境只能下载tar.gz包, 然后编译安装, 不能直接使用yum快速安装 准备相关依赖 yum -y install epel-release yum -y update 安装开发者工具 yum groupinstall "Development Tools" -y yum install openssl-de…