from bs4 import BeautifulSoup import csv import os import re # 设置文件夹路径 folder_path = 'C:/Users/test/Desktop/DIDItest' # 创建CSV文件 csv_file = open('output.csv', 'w', newline='') csv_writer = csv.writer(csv_file) csv_writer.writerow(['ID', '时间', '发送号码', '接收号码', '发送内容']) # 遍历文件夹下的所有文件 for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith('.html'): file_path = os.path.join(root, file) # 打开文件并解析HTML源代码 with open(file_path, 'r', encoding='utf-8') as f: soup = BeautifulSoup(f, 'html.parser') # 提取talkid、时间、发送号码、接收号码、信息类型和消息内容的正则表达式模式 pattern = r'\[talkid:(\d+)\](.*?)</span> 向 (.*?) 发送 (.*?):\[(.*?)\]' matches = re.findall(pattern, soup) # 遍历匹配结果并输出 for match in matches: talkid = match[0] time = match[1].strip() sender = match[2].strip() receiver = match[3].strip() type = match[4].strip() content = re.findall(r'<a href="(.*?)">', match[5])[0] if type in ['音频', '图片'] else match[5] # 写入CSV文件 csv_writer.writerow([talkid, time, sender, receiver, content]) # 关闭CSV文件 csv_file.close() print("数据已成功写入CSV文件。")
时间: 2024-04-14 12:28:41 浏览: 104
这段代码是用于将指定文件夹下的HTML文件解析并提取其中的信息,然后将提取的信息写入CSV文件中。具体步骤如下:
1. 导入需要的模块:`BeautifulSoup`用于解析HTML,`csv`用于操作CSV文件,`os`用于文件路径操作,`re`用于正则表达式匹配。
2. 设置文件夹路径:将需要解析的HTML文件所在的文件夹路径赋值给变量`folder_path`。
3. 创建CSV文件:使用`open`函数创建一个名为`output.csv`的CSV文件,并创建一个`csv.writer`对象用于写入数据。第一行写入CSV文件的标题行。
4. 遍历文件夹下的所有文件:使用`os.walk`函数遍历指定文件夹下的所有文件。
5. 判断文件是否为HTML文件:通过判断文件名的后缀是否为`.html`来确定是否为HTML文件。
6. 打开文件并解析HTML源代码:使用`open`函数打开文件,并使用`BeautifulSoup`将文件内容解析为HTML对象。
7. 提取信息并写入CSV文件:使用正则表达式模式提取talkid、时间、发送号码、接收号码、信息类型和消息内容,并使用`re.findall`函数匹配所有符合模式的内容。然后遍历匹配结果,提取相应的内容,并根据信息类型进行判断处理。最后将提取到的数据写入CSV文件。
8. 关闭CSV文件:使用`close`方法关闭CSV文件。
9. 输出成功信息:打印提示信息,表示数据已成功写入CSV文件。
请注意,这段代码中的路径、正则表达式模式等部分可能需要根据实际情况进行调整。
相关问题
import os import re import csv from bs4 import BeautifulSoup folder_path = 'C:/Users/test/Desktop/DIDItest' html_files = [] # 遍历文件夹及其子文件夹下所有HTML文件 for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith('.html'): html_files.append(os.path.join(root, file))打开并提取所有html文件源代码
您好!要打开并提取所有HTML文件的源代码,可以按照以下步骤进行操作:
1. 导入所需的库:
```python
import os
from bs4 import BeautifulSoup
```
2. 指定文件夹路径和一个空列表来存储HTML文件的路径:
```python
folder_path = 'C:/Users/test/Desktop/DIDItest'
html_files = []
```
3. 使用`os.walk()`函数遍历文件夹及其子文件夹下的所有文件,并筛选出以`.html`结尾的文件:
```python
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith('.html'):
html_files.append(os.path.join(root, file))
```
4. 循环遍历所有HTML文件,并使用BeautifulSoup库打开并提取源代码:
```python
for file_path in html_files:
with open(file_path, 'r', encoding='utf-8') as file:
html_source_code = file.read()
soup = BeautifulSoup(html_source_code, 'html.parser')
# 在这里可以对源代码进行进一步的处理或提取需要的信息
```
请注意,这里使用了BeautifulSoup库来解析HTML文件,您需要确保已经安装了该库,可以使用`pip install beautifulsoup4`来安装。
希望能对您有所帮助!如有任何疑问,请随时提问。
import os from bs4 import BeautifulSoup import re import csv import pandas as pd # 指定文件夹路径 folder_path = "C:/Users/test/Desktop/DIDItest" # 正则表达式模式 pattern = r'<body>(.*?)<\/body>' # 创建CSV文件并写入表头 # CSV文件路径 csv_file = 'path/to/your/csv/file.csv' csv_file = "output.csv" # 遍历文件夹中的所有文件 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-sig") as f: html_code = f.read() # 创建BeautifulSoup对象 soup = BeautifulSoup(html_code, 'html.parser') # 使用正则表达式匹配<body>标签内的数据 body_data = re.findall(pattern, html_code, re.DOTALL) # 剔除<p>和()</p> body_data = body_data[0].replace("<p>", "").replace("()</p>", "") # # 使用正则表达式提取talk_id、时间、发送者ID和接收者ID matches2 = re.findall(r'(?:中发言|发送)\s*(.*?)\s*(?:音频 :|图片 :)?(?:\[([^\]]+)\])?', body_data) for match in matches2: # 提取链接地址 file_text = match[1] matches = re.findall(r'"([^"]*)"', file_text) if matches: file_name = matches[0] else: file_name = "No matches found." # print(file_name) # 替换字符 file_name = file_name.replace('No matches found.','') # 将提取的数据加载到DataFrame中 df_extracted = pd.DataFrame(file_name) # 读取原有的CSV文件 df_original = pd.read_csv(csv_file) print("---导入完成-----")
根据你的代码,你想将提取的文件名数据加载到一个DataFrame中,并将原有的CSV文件读取到另一个DataFrame中。然后,你可能想将提取的文件名数据写入已建的CSV文件中。以下是你可以继续完善的代码示例:
```python
import os
from bs4 import BeautifulSoup
import re
import csv
import pandas as pd
# 指定文件夹路径
folder_path = "C:/Users/test/Desktop/DIDItest"
# 正则表达式模式
pattern = r'<body>(.*?)<\/body>'
# 创建CSV文件并写入表头
csv_file = "output.csv"
header = ['File Name'] # 表头
# 首次创建CSV文件时,写入表头
if not os.path.exists(csv_file):
with open(csv_file, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header)
# 遍历文件夹中的所有文件
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-sig") as f:
html_code = f.read()
# 创建BeautifulSoup对象
soup = BeautifulSoup(html_code, 'html.parser')
# 使用正则表达式匹配<body>标签内的数据
body_data = re.findall(pattern, html_code, re.DOTALL)
# 剔除<p>和()</p>
body_data = body_data[0].replace("<p>", "").replace("()</p>", "")
# 使用正则表达式提取文件名
matches = re.findall(r'"([^"]*)"', body_data)
if matches:
file_name = matches[0]
else:
file_name = "No matches found."
# 替换字符
file_name = file_name.replace('No matches found.', '')
# 将提取的数据写入CSV文件
with open(csv_file, mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow([file_name])
print("数据已成功写入CSV文件")
```
在上面的代码中,我添加了一些逻辑来创建CSV文件并写入表头。然后,使用`csv.writer`将提取的文件名写入CSV文件中的新行。请确保提供正确的文件夹路径和CSV文件路径,并根据需要调整代码。
阅读全文