import re
import csv
# 打开名为'a1.txt'的文件,并以只读模式('r')读取其内容。这里使用了'UTF-8'编码。
with open('网页源码a1.txt', 'r', encoding='UTF-8') as f:
# 读取文件的所有内容并赋值给变量'source'
source = f.read()
# 使用正则表达式查找所有匹配'region_header clearfix(.*?)thread_list_bottom clearfix'的字符串,并将结果赋值给变量'every_reply'。
# 这里使用的是非贪婪匹配,即匹配最少的字符以满足正则表达式。
every_reply = re.findall('region_header clearfix(.*?)thread_list_bottom clearfix', source, re.S)
# 打印匹配到的结果数量
print(len(every_reply))
# 遍历每个匹配结果
for each in every_reply:
# 在每个匹配结果中查找主题作者的用户名
t1 = re.findall('title="主题作者:(.*?)"', each, re.S)
# 在每个匹配结果中查找帖子的内容
t2 = re.findall('threadlist_abs_onlyline ">(.*?)<', each, re.S)
# 在每个匹配结果中查找回复的时间
t3 = re.findall('=2023-(.*?)_', each, re.S)
# 打印找到的主题作者的数量
print(len(t1))
# 创建一个空列表用于保存提取的信息
result_list = []
# 遍历每个主题作者的用户名
for i in range(len(t1)):
# 创建一个空字典用于保存提取的信息
result = {}
# 如果当前主题作者的帖子存在,则提取帖子的内容并去除其中的换行符
if i < len(t2):
result['username'] = t1[i]
result['content'] = t2[i].replace('\n ', '')
result['reply_time'] = t3[i]
# 将提取的信息添加到结果列表中
result_list.append(result)
# 打开名为'tieba.csv'的文件,并以写入模式('w')写入数据。这里使用了'UTF-8'编码。
with open('tieba.csv', 'w', encoding='UTF-8') as f:
# 创建一个CSV写入器,指定字段名为'username', 'content', 'reply_time'
writer = csv.DictWriter(f, fieldnames=['username', 'content', 'reply_time'])
# 写入CSV文件的头部(字段名)
writer.writeheader()
# 将提取的信息写入CSV文件中
writer.writerows(result_list)
运行后'tieba.csv'的文件




















