如何从电子邮件中检索超链接,并访问它?

2024-10-04 09:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用这个python代码,它将从imap.laposte.net检索我的电子邮件(来自法国,我来自哪里,我住在哪里),然后按照邮件中给定的链接,然后将指定页面之一发送回电子邮件地址。 这项工作的第一部分已经很好了;我在网上找到了几个关于使用imaplib来检索和选择我想要的内容的例子;而且我相信学习如何发送我将访问过的页面也很容易。 但问题是,给定一个电子邮件中的链接,我如何选择它,然后访问给定的页面? 我在data[0].split()中以一种字符串的形式检索电子邮件,然后用Beautiful Soup处理该字符串,就好像它是网页一样,以便从中提取电子邮件中包含的url:

import imaplib, rfc822, sys
from bs4 import BeautifulSoup
server  ='imap.laposte.net'
username='username'
password='VeryStrong'
M = imaplib.IMAP4(server)
M.login(username, password)
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    pos1=data[0][1][0:1000].find('entre-infideles')
    if pos1 != -1: 
        print '06ReadImap: Message %s' % (num)
        pos2=data[0][1][pos1:].find('Subject')
        pos3=data[0][1][pos1+pos2:].find('Subject: <PUB>')
        pos4=data[0][1][pos1+pos2+pos3:].find('votre profil')
        if pos4 != -1:
            print '06ReadImap: Pos4(votre profil)=%i' % (pos2+pos3+pos4)
            print data[0][1][pos1+pos2+pos3:pos1+pos2+pos3+pos4+12]
            soup=BeautifulSoup(data[0][1])
            for link in soup.find_all('a'):
                print(link.get('href'))
            sys.exit(0)

问题是,它给了我很多链接,当然,所有这些都包含在电子邮件中,但它们是不完整的,我不能使用它们作为URL来“获取”包含HTLM内容的页面;它提供了:

^{pr2}$

如何从电子邮件中的链接中检索完整的URL? 非常感谢, 大卫


Tags: data链接电子邮件username页面findnumimaplib
2条回答

您需要先撤消邮件的内容传输编码。这一个似乎是引用的可打印编码,这让您的HTML解析器很困惑。在

        # quoted_printable_decode python
        result = quopri.decodestring(data[0][1])
        #
        soup=BeautifulSoup(result)
        print "\n         Extracting all the URLs found within page 1’s <a> tags :".encode('utf8')
        i=0
        for link in soup.find_all('a'):
            i=i+1
            print(link.get('href'))

开始了, D

相关问题 更多 >