BS4提取chrome.webdriver方法和属性以及描述并输出到Excel

BS4网络提取selenium.chrome.WebDriver类的方法及属性
chrome.webdriver: selenium.webdriver.chrome.webdriver — Selenium 4.18.1 documentation

class selenium.webdriver.chrome.webdriver.WebDriver 是 Selenium 中用于操作 Chrome 浏览器的 WebDriver 类。WebDriver 类是 Selenium 提供的一个关键类,用于驱动浏览器执行各种操作,比如打开网页、查找元素、模拟用户操作等

通过使用 selenium.webdriver.chrome.webdriver.WebDriver 类,结合其他 Selenium 提供的方法和类,可以实现自动化测试、网页数据抓取等功能。Chrome WebDriver 是针对 Chrome 浏览器的驱动程序,可以与 Chrome 浏览器无缝集成,实现对浏览器的控制和操作。

提取信息截图:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

url = "https://www.selenium.dev/selenium/docs/api/py/webdriver_chrome/selenium.webdriver.chrome.webdriver.html#module-selenium.webdriver.chrome.webdriver"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

data = []

# 提取方法
methods = soup.find_all('dl', class_='method')
for method in methods:
    name = method.find('dt').find('code').text.strip()
    description = method.find('dd').text.strip()
    description = re.sub(r'\n\s*\n', '\n', description)  # 使用正则表达式删除多余的空行
    data.append(['Method', name, description])

# 提取属性
# 正则表达式r'\n\s*\n'的含义是:
# \n: 匹配换行符。
# \s*: 匹配零个或多个空白字符(空格、制表符等)。
# \n: 再次匹配换行符。
# 整个正则表达式r'\n\s*\n'用来匹配连续出现的多个换行符,并且中间可以包含任意数量的空白字符。
# 这样就可以将连续的多个空行替换为单个换行符,从而实现删除多余空行的效果。
# 在代码中的使用是为了确保描述信息中不会出现多个连续的空行,而只保留一个换行符作为段落分隔。

attributes = soup.find_all('dl', class_='attribute')
for attribute in attributes:
    name = attribute.find('dt').find('code').text.strip()
    description = attribute.find('dd').text.strip()
    description = re.sub(r'\n\s*\n', '\n', description)  # 使用正则表达式删除多余的空行
    data.append(['Attribute', name, description])



# 将数据存储到DataFrame中
df = pd.DataFrame(data, columns=['Type', 'Name', 'Description'])

# 将数据写入Excel文件
excel_file = "methods_attributes.xlsx"
df.to_excel(excel_file, index=False)

正则表达式r'\n\s*\n'的含义是:
\n: 匹配换行符。
\s*: 匹配零个或多个空白字符(空格、制表符等)。
\n: 再次匹配换行符。
整个正则表达式r'\n\s*\n'用来匹配连续出现的多个换行符,并且中间可以包含任意数量的空白字符。
这样就可以将连续的多个空行替换为单个换行符,从而实现删除多余空行的效果。
在代码中的使用是为了确保描述信息中不会出现多个连续的空行,而只保留一个换行符作为段落分隔。

-------------------------------
基础知识:
# 当使用 BeautifulSoup 的 find_all() 方法进行查找时,可以结合多种条件和技巧来定位和提取需要的元素。
# 以下是归纳的一些常见的 find_all() 查找方式:
# 按标签名查找:soup.find_all('tag_name')
# 按类名查找:soup.find_all(class_='class_name')
# 按 id 查找:soup.find_all(id='element_id')
# 按属性查找:soup.find_all(attrs={'attribute': 'value'})
# 结合多个条件查找:soup.find_all('tag', class_='class_name', attrs={'attribute': 'value'})
# 按文本内容查找:soup.find_all(text='desired_text')
# 结合正则表达式的文本内容查找:soup.find_all(text=re.compile(r'regex_pattern'))
# 按子节点查找:parent_element.find_all('child_tag')
# 按序号查找:soup.find_all('tag_name')[index]
# 查找特定属性存在的元素:soup.select('[attribute]')
# 结合列表推导式进行查找:[tag for tag in soup.find_all() if condition]
# find(name, attrs, recursive, text, **kwargs):在当前标签内查找第一个符合条件的元素,并返回其 Tag 对象。
# find_all(name, attrs, recursive, text, limit, **kwargs):在当前标签内查找所有符合条件的元素,并返回一个列表。
# find_parent(name, attrs, recursive, text, **kwargs):查找当前标签的父元素并返回其 Tag 对象。
# find_next_sibling(name, attrs, recursive, text, **kwargs):查找当前标签的下一个同级元素并返回其 Tag 对象。

# tag.name:用于获取元素的标签名。
# tag.text 或 tag.get_text():用于获取元素的文本内容。
# tag['attribute'] 或 tag.get('attribute'):用于获取元素的属性值。
# tag.contents:用于获取元素的子节点列表。
# tag.parent 或 tag.parents:用于获取元素的父节点或祖先节点。
# tag.next_sibling 或 tag.previous_sibling:用于获取元素的下一个兄弟节点或上一个兄弟节点。
# tag.next_element 或 tag.previous_element:用于获取元素的下一个节点或上一个节点,可以是标签、字符串或注释。
# tag.has_attr('attribute'):用于判断元素是否包含某个属性。
# tag.find_previous(name=None, attrs={}, text=None, **kwargs) 和 tag.find_all_previous(name=None, attrs={}, text=None, limit=None, **kwargs):用于查找元素前面的满足条件的元素,参数与 find() 和 find_all() 方法类似。
# tag.select_one(selector):用于按照 CSS 选择器语法查找元素,并返回第一个匹配的元素。
# tag.select(selector):用于按照 CSS 选择器语法查找元素,并返回所有匹配的元素。

select() 方法是 BeautifulSoup 中用于按照 CSS 选择器语法查找元素,并返回所有匹配的元素的功能。通过使用CSS选择器语法,可以更方便地定位和选择需要的元素。
下面是 select() 方法及其参数的详细介绍:
语法 select(selector)
参数说明
selector:字符串类型,表示 CSS 选择器语法的表达式,用于指定要查找的元素。
CSS 选择器语法示例
标签选择器:tagname,如 p 表示选择所有 <p> 标签。soup.select('p')
类选择器:.classname,如 .content 表示选择所有 class 属性为 content 的元素。soup.select('.content')
ID 选择器:#idname,如 #footer 表示选择 id 属性为 footer 的元素。soup.select('#header')
层级选择器:ancestor descendant,如 div p 表示选择所有 <p> 标签,其父元素为 <div>。soup.select('div p')
子元素选择器:parent > child,如 div.content > p 表示选择所有 <p> 标签,其父元素为 <div>,且 class 属性为 content。soup.select('div.content > p')
后代元素选择器:ancestor descendant,如 div .content 表示选择所有具有 content 类名的元素,且其祖先元素为 <div>。soup.select('div .content')

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

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

相关文章

数据可视化-ECharts Html项目实战(4)

在之前的文章中&#xff0c;我们学习了如何创建圆环图、嵌套圆环图、蓝丁格尔玫瑰图。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Htm…

鸿蒙一次开发,多端部署(二)从一个例子开始

本章通过一个天气应用&#xff0c;介绍一多应用的整体开发过程&#xff0c;包括UX设计、工程管理及调试、页面开发等。 UX设计 本示例中的天气应用包含主页、管理城市和添加城市三个页面&#xff0c;其中主页中又包含菜单和更新间隔两个弹窗&#xff0c;基本业务逻辑如下所示…

2024.3.21学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p246-p251 this关键词 java虚拟机会给每个对象分配this, 代表当前对象 this内存机制 this关键字可以用来访问类的属性、方法、构造器 this用以区分当前类的属性和局部变量 访问成员方法的语法…

《云计算:数字时代的引擎》

在数字化时代&#xff0c;云计算技术以其强大的计算能力和灵活的应用方式&#xff0c;成为推动各行各业发展的引擎。本文将围绕云计算的技术进展、技术原理、行业应用案例、面临的挑战与机遇以及未来趋势进行详细探讨。 云计算的技术进展 云计算的技术进展涵盖了多个方面&…

Redis入门到入坑(二)

Redis入门到入坑&#xff08;二&#xff09; Redis 数据持久化简介Rdb方式持久化Aof方式数据持久化 Redis事务处理Redis事务简介Redis事务控制实践 Redis架构设计Redis主从复制Redis哨兵模式Redis集群高可用 Redis在SpringBoot工程中的综合应用业务描述准备工作业务逻辑代码设计…

[ C++ ] STL---list的模拟实现

目录 结点类的模拟实现 迭代器类的模拟实现 构造函数 前置与后置 前置- -与后置 - - 与 !运算符重载 * 运算符重载 -> 运算符重载 普通迭代器总体实现代码 list类的实现 list类的成员变量 构造函数 迭代器 insert(&#xff09; erase() push_front/push_back…

C#探索之路基础篇(2):接口Interface的概念、实现、应用范围

文章目录 1 概念2 示例代码&#xff1a;2.1 简单接口的实现2.2 简单的使用接口2.3 使用接口呈现多态性2.4 通过接口实现一个数组迭代器2.5 通过接口来实现松耦合的关系2.6 使用接口实现可扩展、便利性 3 使用范围与时机4 注意事项 不知道大家在学习的过程中&#xff0c;有没有反…

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新&#xff0c;让我们感叹从没有像今天这样&#xff0c;离人工智能的未来如此之近。 追逐AI原生&#xff1f;企业组织基于并利用大模型技术探索和开发AI应用的无限可能&#xff0c;迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…

机器学习——决策树(四)后剪枝

观前提示&#xff1a;这是本人决策树相关的第四篇博文&#xff0c;前3篇的内容如下&#xff1a; 1、建造训练集的决策树【完成结点类编写和建树过程】 2、用验证集评估模型、选出泛化较好的数据划分方式训练模型 3、预剪枝 读者可根据需要从上方《机器学习》专栏中查阅对应…

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT 文章目录 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPTAbstractI. INTRODUCTIONII. RELATED WORK1. LLMs for Robotics2. Robot Learning III. METHODOLOGY1. ChatGPT Prompts for Robot …

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分&#xff0c;数据域item和指向下一个节点得指针next。通过节点之间的相互连接&#xff0c;最终串联成一个链表。 class Node:def __init…

数据结构——循环队列的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Python 小而精Web开发框架Flask精通指南

文章目录 Flask 简介说明Flask 核心依赖Flask 常用扩展Flask 快速启动工作流程代码示例Flask 快速启动控制台Flask 快速启动效果 Flask 启动参数Flask 路由定义Flask 支持的 HTTP 请求方式&#xff1a;路由装饰器中的参数 Flask 路由参数Flask 路由蓝图路由蓝图的优点路由蓝图的…

痛失offer的八股

java面试八股 mysql篇&#xff1a; 事物的性质&#xff1a; 事物的性质有acid四特性。 a&#xff1a;automic&#xff0c;原子性&#xff0c;要么全部成功&#xff0c;要么全部失败&#xff0c;mysql的undolog&#xff0c;事物在执行的时候&#xff0c;mysql会进行一个快照读…

获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析

使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程&#xff0c;我们需要遵循以下步骤&#xff1a; 获取KEGG通路的基因列表&#xff1a;这通常涉及使用专门的R包&#xff0c;如KEGGREST或biomaRt&#xff0c;来查询KEGG数据库并检索特定通路的基因列表。 准备单细胞表达数…

详解JS原型与原型链的关系

1、构造函数原型prototype (1)、构造函数通过原型分配的函数是所有对象所共享的&#xff1b; (2)、JavaScript规定&#xff0c;每一个构造函数都有一个prototype属性&#xff0c;指向另一个对象&#xff1b; (3)、注意这个prototype就是一个对象&#xff0c;这个对象的所有属性…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二&#xff1a;多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇&#xff1a;Scikit-Learn逻辑回归(一) 上篇中&#xff0c;我们详细介绍了逻辑回归的概念、原理…

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法 需求&#xff1a;需要一个搜索框&#xff0c;可以选择员工&#xff0c;&#xff08;员工人数多无法一次性获取&#xff0c;全部放入options中&#xff09;&#xff0c;所以需要使用搜索功能&#xff0c;而且是可以多…

XR“黑话”

MTP&#xff08;Motion-To-Photon Latency&#xff09;&#xff1a;实际人体发生运动到图像显示到屏幕上的时间延迟。早期一些vr产生晕动症的主要原因。 ATW&#xff08;Asynchronous Timewarp&#xff09;&#xff1a;主要解决两个问题&#xff0c;一是延迟&#xff0c;二是补…

CSS弹性盒模型(学习笔记)

一、厂商前缀 1.1 作用 解决浏览器对C3新特性的兼容&#xff0c;不同的浏览器厂商&#xff0c;定义了自己的厂商前缀 1.2 语法 浏览器 厂商前缀内核(渲染引擎)&#xff1a;解析htmlcssjs谷歌 -webkit-blink苹果-webkit-webkit欧朋-o-blink火狐 -moz-geckoIE-ms- trid…
最新文章