import os from bs4 import BeautifulSoup # 指定文件夹路径 folder_path = "C:/Users/test/Desktop/DIDItest" # 遍历文件夹中的所有文件 for root, dirs, files in os.walk(folder_path): for file in files: # 读取html文件 file_path = os.path.join(root, file) with open(file_path, "r", encoding="utf-8") as f: html_code = f.read() # 解析html代码 soup = BeautifulSoup(html_code, "html.parser") # 查找<body>标签内的数据 body_data = soup.find('(中发言|发送)\s(.*?)\s').get_text() print(body_data)
时间: 2024-04-16 12:29:15 浏览: 93
根据你提供的代码,你想遍历指定文件夹中的所有 HTML 文件,并解析每个文件中 `<body>` 标签内的数据。
在你的代码中,`body_data` 变量在 `for` 循环外部被打印,这会导致只打印最后一个文件的结果。如果你想要打印每个文件的结果,需要将 `print(body_data)` 语句放置在内部的 `for` 循环中。
另外,你使用了 `soup.find('(中发言|发送)\s(.*?)\s').get_text()` 来查找满足正则表达式条件的文本内容。然而,`find()` 方法接受的是一个标签名或属性名,并不支持直接传入正则表达式。如果你想使用正则表达式来查找特定的文本内容,可以使用 `find_all()` 方法结合正则表达式进行匹配。
以下是修正后的代码示例:
```python
import os
import re
from bs4 import BeautifulSoup
# 指定文件夹路径
folder_path = "C:/Users/test/Desktop/DIDItest"
# 遍历文件夹中的所有文件
for root, dirs, files in os.walk(folder_path):
for file in files:
# 读取html文件
file_path = os.path.join(root, file)
with open(file_path, "r", encoding="utf-8") as f:
html_code = f.read()
# 解析html代码
soup = BeautifulSoup(html_code, "html.parser")
# 查找<body>标签内的数据
body_data = soup.find_all(text=re.compile('(中发言|发送)\s(.*?)\s'))
# 打印每个文件的结果
for data in body_data:
print(data)
```
在上面的代码中,`re.compile('(中发言|发送)\s(.*?)\s')` 使用正则表达式来匹配符合条件的文本内容。`soup.find_all()` 返回一个包含所有匹配结果的列表,我们可以遍历列表并打印每个结果。
请注意,在使用正则表达式时,确保你的正则表达式模式与实际文本内容匹配。如果没有找到匹配的结果,`body_data` 变量将是一个空列表。
希望这可以帮助到你!如果你还有其他问题,请随时提问。
阅读全文