python - imap_tools 需要很长时间才能从电子邮件中抓取链接
问题描述
我正在使用 imap_tools 从电子邮件中获取链接。电子邮件非常小,几乎没有文字、图形等。也不是很多,大约 20-40 天传播。
当一封新电子邮件到达时,抓取链接需要 10 到 25 秒。这似乎很长。我本来预计它会少于 2 秒,而且速度很重要。
NB。它是一个共享邮箱,我不能简单地获取看不见的电子邮件,因为其他用户通常会在抓取工具到达之前打开电子邮件。
任何人都可以看到问题是什么?
import pandas as pd
from imap_tools import MailBox, AND
import re, time, datetime, os
from config import email, password
uids = []
yahooSmtpServer = "imap.mail.yahoo.com"
data = {
'today': str(datetime.datetime.today()).split(' ')[0],
'uids': []
}
while True:
while True:
try:
client = MailBox(yahooSmtpServer).login(email, password, 'INBOX')
try:
if not data['today'] == str(datetime.datetime.today()).split(' ')[0]:
data['today'] = str(datetime.datetime.today()).split(' ')[0]
data['uids'] = []
ds = str(datetime.datetime.today()).split(' ')[0].split('-')
msgs = client.fetch(AND(date_gte=datetime.date.today()))
for msg in msgs:
links = []
if str(datetime.datetime.today()).split(' ')[0] == str(msg.date).split(' ')[0] and not msg.uid in data['uids']:
mail = msg.html
if 'order' in mail and not 'cancel' in mail:
for i in re.findall(r'(https?://[^\s]+)', mail):
if 'pick' in i:
link = i.replace('"', "")
link = link.replace('<', '>').split('>')[0]
print(link)
links.append(link)
break
data['uids'].append(msg.uid)
scr_links = pd.DataFrame({'Links': links})
scr_links.to_csv('Links.csv', mode='a', header=False, index=False)
time.sleep(0.5)
except Exception as e:
print(e)
pass
client.logout()
time.sleep(5)
except Exception as e:
print(e)
print('sleeping for 5 sec')
time.sleep(1)
解决方案
我认为这是电子邮件服务器限制超时。
尝试查看 IMAP IDLE。
从 0.51.0 imap_tools 开始支持 IDLE:
推荐阅读
- php - 如何解决 MySQLi 中的“重复条目”错误
- python - python请求无法连接到NSE india,连接错误
- python - 从 http 更改为 https 后 Python 请求没有得到响应
- sql - 使用 laravel 中的 SQL 查询将 Auth::user()-id 存储在数据库中
- php - 在我的服务器上哪里可以找到 php-fpm.log 和 php-fpm.conf?
- php - 登录后页面不重定向
- c++ - 如何让我的虚拟机使用 CNTLM 在代理后面下载 https 文件,用 Qt 用 C++ 编写?
- python - Pandas 从 ExcelWriter 创建 zip 文件
- .net - NUnit TestCase 不能引用实例成员
- django - Django-filter - 对表单中具有不同主键的值进行分组