网页内源代码模板如下: <html> <meta http-equiv="Content=-Type" content="text/html; charset=utf-8"> <head> <link href="http://192.167.1.101/hint.css" rel="stylesheet"></link> </head> <body>[talkid:138031361]2014年4月20日 03:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">232323</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> [talkid:138031362]2014年4月20日 04:45:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">123456</span> 发送 音频 :[<ahref="files/f/f123fsasfsfsjdfrhf_n.m4a"]>音频</a> <p> ()</p> [talkid:138031363]2014年4月20日 04:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">123456</span> 发送 音频 :[<ahref="files/f/f123fsasfsfsjdfrhf_n.jpg"]>图片</a> <p> ()</p> [talkid:138031364]2014年4月20日 05:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">3234221</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> [talkid:138031365]2014年4月20日 06:55:45 , <span class="hint-success" data-hint"">434343</span> 向 <span class="hint-success" data-hint="">1359075</span> 发送 我们已经是好友了,开始聊天吧! <p> ()</p> </body> </html> 利用python爬虫,打开C:/Users/test/Desktop/DIDItest文件夹下多个文件夹内的html文件源代码,并爬取源代码中的ID、时间、发送号码、接收号码、发送内容,如果发送内容为音频则提取音频所在位置,反之则保留发送内容,并将爬取的内容写入csv中
时间: 2023-08-14 17:59:00 浏览: 76
你可以使用Python的BeautifulSoup库来解析HTML代码,并使用正则表达式来提取所需的数据。下面是一个示例代码,它可以打开指定文件夹下的所有HTML文件,解析源代码,并将提取的数据写入CSV文件:
```python
import os
import re
import csv
from bs4 import BeautifulSoup
# 设置文件夹路径
folder_path = "C:/Users/test/Desktop/DIDItest"
# 创建CSV文件并写入表头
csv_file = open("output.csv", "w", newline="", encoding="utf-8")
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 html_file:
source_code = html_file.read()
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(source_code, "html.parser")
# 提取ID、时间、发送号码、接收号码、发送内容
talk_id = re.search(r"\[talkid:(\d+)\]", source_code).group(1)
time = re.search(r"\d{4}年\d{1,2}月\d{1,2}日 \d{2}:\d{2}:\d{2}", source_code).group()
send_number = re.search(r"<span class=\"hint-success\" data-hint\"\">(\d+)</span>", source_code).group(1)
receive_number = re.findall(r"<span class=\"hint-success\" data-hint\"\">(\d+)</span>", source_code)[1]
content = re.search(r"<p>\s*\(\)\s*</p>", source_code).group()
# 如果发送内容为音频,则提取音频所在位置
if "音频" in content:
audio_url = re.search(r"<ahref=\"(.*?)\"]>音频</a>", source_code).group(1)
content = audio_url
# 写入CSV文件
csv_writer.writerow([talk_id, time, send_number, receive_number, content])
# 关闭CSV文件
csv_file.close()
```
请注意,上述代码假设每个HTML文件中都只有一个聊天记录块,并且数据的提取模式是固定的。如果HTML文件的结构有所不同,你可能需要调整正则表达式来匹配正确的数据。此外,你还可以根据需要添加异常处理以提高代码的健壮性。
阅读全文