使用python读取HTML文件,判断元素取出前一个相邻属性,元素的文本内容

使用python读取HTML文件,判断元素取出前一个相邻属性,元素的文本内容

一、在过程中遇到的坑

1、使用pyinstaller打包exe后的路径问题(找不到文件,但是.py运行正常)

解决办法:current_dir = os.path.dirname(os.path.realpath(sys.executable))

在这段代码中,os和sys都是Python内置模块,os.path是一个处理文件路径的模块,而sys.executable是一个包含Python解释器路径的变量。

这段代码的作用是获取当前正在运行的Python解释器所在的目录的绝对路径。具体来说,它通过以下步骤实现:

1、os.path.realpath(sys.executable)获取Python解释器的真实路径,即解析符号链接后的路径。

2、os.path.dirname()获取解释器路径的目录名,即去掉路径中的文件名部分,只保留路径的上一级目录名。

3、最终,current_dir变量包含了Python解释器所在的目录的绝对路径。

二、具体代码

import sys
from time import sleep
from bs4 import BeautifulSoup
import openpyxl
import os
import glob

# 获取当前文件夹路径
# current_dir = os.path.dirname(os.path.realpath(sys.executable))
#py运行时要使用__file__
current_dir = os.path.dirname(os.path.abspath(__file__))

# 使用 glob 模块查找所有的 HTML 文件
html_files = glob.glob(current_dir + "/*.html")

#定义一个空字符串
file_name = ''
# 遍历所有 HTML 文件并打印它们的文件名
for file_path in html_files:
    file_name = os.path.basename(file_path)
    print('你要读取的文件是:{}'.format(file_name),'\n')

# 创建一个新的workbook对象
workbook = openpyxl.Workbook()
# 选择第一个工作簿
worksheet = workbook.active
# 读取HTML文件
with open(file_name, 'r',encoding='utf-8') as f:
    html_data = f.read()

# 解析HTML文件
soup = BeautifulSoup(html_data, 'html.parser')

# 查找所有class属性为'failure'的<div>元素
failure_div_elements = soup.find_all('div', {'class': 'failure'})
# 遍历所有failure_div元素
dxc = 1
for failure_div_element in failure_div_elements:
    # 获取当前failure_div元素所在的父元素
    parent_li_element = failure_div_element.parent

    # 如果父元素是<li>元素
    if parent_li_element.name == 'li':
        # 查找相邻的class属性为'navigation'的前一个<li>元素
        navigation_li_element = parent_li_element.find_previous_sibling('li', {'class': 'navigation'})

        # 如果找到了class属性为'navigation'的<li>元素
        if navigation_li_element is not None:

            # 取出该元素的文本
            navigation_text = navigation_li_element.text.strip()
            print(navigation_text)
            # 写入数据
            worksheet.cell(row=dxc, column=1, value=navigation_text)
            # 保存workbook
            workbook.save("data.xlsx")
    dxc += 1
print('\n','写入成功,生成:data.xlsx    5秒后关闭该窗口,可手动关闭')
sleep(5)

三、html示例

<li class = 'True'>取错了</li>
    <div class = 'True'>取错了</div>
<li class = 'True'>取错了</li>
    <div class = 'True'>取错了</div>
<li class = 'navigation'>取对了</li>
<li class = 'True'>取错了</li>
    <div class = 'failure'>取错了</div>
<li class = 'True'>取错了</li>
<li class = 'True'>取错了</li>
    <div class = 'True'>取错了</div>

四、运行示例

你要读取的文件是:SmokeReport20230227010508.html 

Thread: XXXXXXXXXXXX
Thread: XXXXXXXXXXXXXXX
Thread: XXXXXXXXXXXXXX
Thread: XXXXXXXXXXXXXXX
Thread: XXXXXXXXXX
Thread: XXXXXXXXXXXXX
Thread: XXXXXXXXXXXXXX
Thread: XXXXXXXXXXXXXXX


 写入成功,生成:data.xlsx    5秒后关闭该窗口,可手动关闭
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值