利用python爬虫,打开C:/Users/test/Desktop/DIDItest文件夹下所有文件夹内的html文件源代码,将源代码转换为字符串格式,并从中爬取talkid、时间(转换为“0000-00-00”格式)、发送号码、接收号码、发送内容,如果发送内容不为文本,则提取文件所在链接地址,并将爬取的内容写入csv中,talkid提取[]中talkid:后的数字、时间精确至年月日时分秒、发送号码提取第一个 data-hint""></span>之间的数字,接收号码提取第二个data-hint""></span>,发送内容提取‘</span> 发送’后内容,如果是音频或图片,则提取链接地址,第一个<span class="hint-success" data-hint"">后的数字作为发送方,’向<span class="hint-success" data-hint"">’后的数字作为接收方,未提取到信息内容,</span> 发送后内容作为信息内容,如果是图片音频提取链接地址,反之则提取文字内容
时间: 2024-04-15 22:30:23 浏览: 111
以下是使用Python爬虫实现您描述的任务的示例代码:
```python
import os
import re
import csv
# 定义文件路径
folder_path = "C:/Users/test/Desktop/DIDItest"
# 定义正则表达式模式
talkid_pattern = r'\[talkid:(\d+)\]'
time_pattern = r'(\d{4}年\d{1,2}月\d{1,2}日 \d{2}:\d{2}:\d{2})'
sender_pattern = r'data-hint"">(\d+)</span>'
receiver_pattern = r'data-hint"">(\d+)</span>'
text_content_pattern = r'</span> ([^<>]+)'
file_link_pattern = r'<a href="([^"]+)"'
# 定义CSV文件路径和字段
csv_file = "output.csv"
csv_fields = ["talkid", "time", "sender", "receiver", "content"]
# 创建CSV文件并写入标题行
with open(csv_file, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(csv_fields)
# 遍历文件夹内的html文件
for root, dirs, files in os.walk(folder_path):
for file_name in files:
if file_name.endswith(".html"):
file_path = os.path.join(root, file_name)
# 打开html文件,读取源代码
with open(file_path, encoding='utf-8') as html_file:
source_code = html_file.read()
# 提取信息并写入CSV文件
talkid = re.findall(talkid_pattern, source_code)
time = re.findall(time_pattern, source_code)
sender = re.findall(sender_pattern, source_code)
receiver = re.findall(receiver_pattern, source_code)
text_content = re.findall(text_content_pattern, source_code)
file_link = re.findall(file_link_pattern, source_code)
# 处理时间格式
time = [t.replace("年", "-").replace("月", "-").replace("日", "") for t in time]
# 创建CSV行数据
row_data = zip(talkid, time, sender, receiver, text_content)
for row in row_data:
csv_row = list(row)
# 处理文件链接或文本内容
if len(file_link) > 0:
csv_row[4] = file_link[0]
file_link.pop(0)
elif len(csv_row[4]) < 1:
csv_row[4] = text_content.pop(0)
# 写入CSV文件
with open(csv_file, mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow(csv_row)
```
该代码会遍历指定文件夹下的所有html文件,并根据正则表达式模式提取所需的信息。然后,它会将提取的信息写入一个CSV文件中,其中包括talkid、时间、发送号码、接收号码和发送内容。如果发送内容为音频或图片,则会提取文件链接地址。请确保在运行代码之前已安装所需的模块(`os`、`re`、`csv`)。
请注意,代码中使用的正则表达式模式可能需要根据您的实际情况进行调整。
阅读全文