Traceback (most recent call last): File "C:\Users\test\PycharmProjects\pythonProject\DIDI数据写入CSV.py", line 32, in <module> content = message.find('a').get('href') if message.find('a') else message.contents[-1].strip() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'NoneType' object is not callable
时间: 2023-08-04 11:08:49 浏览: 72
浅谈Python traceback的优雅处理
这个错误是由于在某些消息记录中没有找到`<a>`标签导致的。您可以使用`if`语句来检查是否找到了`<a>`标签,如果找到了则提取`href`属性,否则提取最后一段文本内容。请尝试以下修改后的代码:
```python
import os
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:
soup = BeautifulSoup(html_file, 'html.parser')
# 获取所有消息记录
messages = soup.find_all('body')
# 遍历消息记录并提取需要的信息
for message in messages:
talk_id = message.get('talkid')
time = message.contents[0].strip().split(',')[0][1:]
sender = message.find(class_='hint-success').text
receiver = message.find_all(class_='hint-success')[1].text
content = message.find('a').get('href') if message.find('a') else message.contents[-1].strip()
# 写入提取的数据到CSV文件
csv_writer.writerow([talk_id, time, sender, receiver, content])
# 关闭CSV文件
csv_file.close()
```
如果某些消息记录中没有`<a>`标签,代码会使用`message.contents[-1].strip()`提取最后一段文本内容。这样可以避免TypeError错误。请确保所有的消息记录都具有相同的HTML结构,以便代码能够正确解析。如果仍然遇到问题,请提供更多的错误信息以便我帮助您解决。
阅读全文