簡體   English   中英

imap_tools 從電子郵件中抓取鏈接需要很長時間

[英]imap_tools Taking Long Time to Scrape Links from Emails

我正在使用 imap_tools 從電子郵件中獲取鏈接。 電子郵件非常小,只有很少的文字、圖形等。也不多,一天大約有 20-40 封。

當收到新電子郵件時,抓取鏈接需要 10 到 25 秒。 這似乎很長。 我原以為它不到 2 秒,而且速度很重要。

鈮。 它是一個共享郵箱,我不能簡單地獲取看不見的電子郵件,因為其他用戶通常會在抓取工具到達之前打開電子郵件。

任何人都可以看到問題是什么?

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。

imap_tools 做不到,但你可能想實現它:D

https://github.com/ikvk/imap_tools/issues/93

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM