Traceback (most recent call last): File "C:\Users\test\PycharmProjects\pythonProject\DIDI数据写入CSV.py", line 26, in <module> talk_id = message.find_previous('a').text.strip()[1:] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'text'
时间: 2023-08-04 10:06:51 浏览: 371
这个错误是因为在找到`<a>`标签之前,没有进行检查是否存在该标签。为了解决这个问题,我们可以使用`find_previous`方法之前添加一个条件判断来确保找到了目标元素。
以下是修改后的代码:
```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_name in files:
if file_name.endswith('.html'):
file_path = os.path.join(root, file_name)
# 打开HTML文件并读取源代码
with open(file_path, 'r', encoding='utf-8') as file:
html_content = file.read()
# 使用BeautifulSoup解析HTML源代码
soup = BeautifulSoup(html_content, 'html.parser')
# 提取ID、时间、发送号码、接收号码和发送内容
messages = soup.find_all('p')
for message in messages:
talk_id_tag = message.find_previous('a')
if talk_id_tag:
talk_id = talk_id_tag.text.strip()[1:]
time = message.contents[0].strip().split(',')[0][1:]
send_phone = message.find('span', class_='hint-success').text.strip()
receive_phone = message.find_all('span', class_='hint-success')[1].text.strip()
content_tag = message.find('a')
if content_tag:
content = content_tag['href']
else:
content = message.text.strip()
# 将提取的数据写入CSV文件
csv_writer.writerow([talk_id, time, send_phone, receive_phone, content])
# 关闭CSV文件
csv_file.close()
```
在修改后的代码中,我们添加了一个判断语句`if talk_id_tag:`来确保`talk_id_tag`不为`None`,只有当找到了目标元素时才进行提取操作。这样可以避免出现`AttributeError`的错误。
阅读全文