【问题标题】:How to retrieve an hyperlink from an email, and go and visit it?如何从电子邮件中检索超链接并访问它?
【发布时间】:2015-03-01 16:19:05
【问题描述】:

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

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 内容的页面;它给出了:

$ python ./S.py
06ReadImap: Message 8
06ReadImap: Pos4(votre profil)=625
Subject: <PUB> salma311 a =?utf-8?Q?visit=C3=A9?= votre profil
3D"http://fr.supe=
3D"h=
3D"htt=
3D"http://fr.superboxy.me/tracking_unitary/2/111740993/=
3D"http://fr.super=
3D"http://fr.superboxy.me/tracking_unitary/2/111740993/=
...
..
.

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

【问题讨论】:

  • 确定要包含用户名和密码?
  • 感谢 jonrsharpe;我刚刚检查了它是否像我描述的那样工作,我确实把所有的东西都贴回去了。
  • 如果它们是实际的凭据,请注意它们仍然可以在编辑历史记录中看到,因此应该失效。
  • 我什至不知道该怎么做。
  • ...更改您的密码?

标签: python email hyperlink beautifulsoup


【解决方案1】:

您需要先撤消消息的内容传输编码。这个似乎是 Quoted Printable 编码,这会让您的 HTML 解析器感到困惑。

【讨论】:

  • 对不起,我什么都不懂;我只看了一两次关于“内容传输编码”的内容,但我不知道如何处理;你能给我一个线索吗?
  • 下载后,您需要使用 pythons 电子邮件库来解析您的邮件。
  • 是的,我在 S/O 上找到了一个示例;再见
【解决方案2】:
        # 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.

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 2022-11-22
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多