python从字符串获取链接

python从字符串获取链接,python,python-3.x,Python,Python 3.x,我需要使用一个python脚本来接收一封电子邮件,并从中提取一个链接,然后打开它们。使用该链接将数据包发送到一个服务器,该服务器中包含该验证链接,以便它验证一个帐户。我将如何使用python获取 https://www.boomlings.com/database/accounts/activate.php?uid=8722046actcode=xLCReGjLdkWmINt1GY9e 出于 {'Sender': 'Geometry Dash', 'Subject': 'Please acti

我需要使用一个python脚本来接收一封电子邮件,并从中提取一个链接,然后打开它们。使用该链接将数据包发送到一个服务器,该服务器中包含该验证链接,以便它验证一个帐户。我将如何使用python获取

https://www.boomlings.com/database/accounts/activate.php?uid=8722046actcode=xLCReGjLdkWmINt1GY9e
出于

{'Sender': 'Geometry Dash', 'Subject': 'Please activate your account.', 'body': b'<style type="text/css">\n#google_translate_element{\n  float: right;\n  padding:0 0 10px 10px;\n}\n/* twitter do\xc4\x9frulama linki fix */\n.bulletproof-btn-1 a {\n  font-size: 20px!important;\n  color: #fff!important;\n  padding: 20px!important;\n  line-height: 33px!important;\n  text-decoration: none!important;\n}\n</style>\n<div id="google_translate_element"></div><script type="text/javascript">\nfunction googleTranslateElementInit() {\n  new google.translate.TranslateElement({pageLanguage: \'en\', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false, multilanguagePage: true}, \'google_translate_element\');\n}\n</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>\n\r\n\r\n<html>\r\n<head>\r\n\t<title></title>\r\n</head>\r\n<body>\r\n<p>Thank you for registering a Geometry Dash account</p>\r\n\r\n<p>Your account information:<br />\r\nUsername:&nbsp; SUKAFUTCUCK</p>\r\n\r\n<p>Please click the link below to activate your account:<br />\r\n<a href="http://www.boomlings.com/database/accounts/activate.php?uid=8722046&actcode=xlCReGjLdkWmINt1GY9e" target="_blank">Click\r\nHere</a></p>\r\n\r\n<p>Please contact support@robtopgames.com if you have any questions or\r\nneed assistance.</p>\r\n\r\n<p>If you did not send an account request using this email, then you\r\ncan safely disregard this message and nothing will happen.</p>\r\n\r\n<p>Regards,<br />\r\nRobTop Games</p>\r\n</body>\r\n</html>\r\n\r\n\r\n'}

当*表示任何长度的字符串都可以到达那里,因为它将是一个不同的activate.php cod

时,您可以将regex用于类似以下内容:

import re
c = re.search("<a href=\".*?(?=\")", yourDict["body"].decode("utf-8"))
print(c.group())

您可以将regex用于以下内容:

import re
c = re.search("<a href=\".*?(?=\")", yourDict["body"].decode("utf-8"))
print(c.group())

假设您的描述中的dict现在位于名为
d
的变量中(此处输入有点长):


假设您描述中的dict现在位于名为
d
的变量中(此处输入有点长):


电子邮件可以是HTML或文本格式。 如果它是HTML格式的,则使用诸如
bs4
pyquery
等库

如果是文本,则使用正则表达式使用以下正则表达式搜索URL

regex=^([^:/?#]+):(/([^/?#]*)?([^?#]*))([^?#]*)(\?([^?#]*))?(#(.*))?

参考:

使用re模块将字符串搜索为

import re
regex = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
urls = re.findall( regex, text )
print(urls)
使用pyquery模块

from pyquery import pyQuery as pq
q = pq( text )
a_list = q( "a" )
urls = [ a.attr[ 'href' ] for a in a_list ]
print(urls)
编辑:

我们可以使用特定的URL代替通用URL,例如
https?:\/\/www\.boomlings\.com\/database\/accounts\/activate\.php\?uid=.*&actcode=.*


电子邮件可以是HTML或文本格式。 如果它是HTML格式的,则使用诸如
bs4
pyquery
等库

如果是文本,则使用正则表达式使用以下正则表达式搜索URL

regex=^([^:/?#]+):(/([^/?#]*)?([^?#]*))([^?#]*)(\?([^?#]*))?(#(.*))?

参考:

使用re模块将字符串搜索为

import re
regex = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
urls = re.findall( regex, text )
print(urls)
使用pyquery模块

from pyquery import pyQuery as pq
q = pq( text )
a_list = q( "a" )
urls = [ a.attr[ 'href' ] for a in a_list ]
print(urls)
编辑:

我们可以使用特定的URL代替通用URL,例如
https?:\/\/www\.boomlings\.com\/database\/accounts\/activate\.php\?uid=.*&actcode=.*


很抱歉要求更多,但我想这不是我遇到的问题。我一直收到一个错误,说缩进中制表符和空格的使用不一致。这是我的小角色。而1:result=m.mailBox()如果result:c=re.search("@LoopTurn正如它所说,缩进是错误的,请检查您使用的是制表符而不是空格。有些编辑器(如sublime)在您使用制表符按钮时使用空格,因此请注意这一点。假设您是Python IDE,请按Alt+6,然后从弹出窗口中取消整个区域替换空格中的制表符。@MauricioCortazar不是如果OP认为url中唯一会改变的是星号的位置,
uid=*actcode=*
?@delirious莴苣你是对的,但他在问题中要求了整个url,无论如何OP会使用整个url而不是参数来要求更多,但我想这不是我遇到的问题。我一直得到一个表示缩进中制表符和空格的使用不一致时出错。这是我的小部分。而1:result=m.mailBox()如果result:c=re.search("@LoopTurn正如它所说,缩进是错误的,请检查您使用的是制表符而不是空格。有些编辑器(如sublime)在您使用制表符按钮时使用空格,因此请注意这一点。假设您是Python IDE,请按Alt+6,然后从弹出窗口中取消整个区域替换空格中的制表符。@MauricioCortazar不是如果OP认为url中唯一会改变的是这些星号的位置,
uid=*actcode=*
?@delirious莴苣你是对的,但他在问题中要求整个url,无论如何OP将使用整个url而不是JUparameters@DeliriousLettuce不确定,为什么这很荒谬,任何正则表达式都可以使用。这个作为一个通用的解决方案,你的正则表达式是正确的,但是当你有一个较短的方法去做的时候,就不需要使用它了it@SonuKumar我不确定你是否读过这个问题,但OP似乎认为url中唯一会改变的部分是星号的位置
uid=*actcode=*
。这个正则表达式将匹配大量OP似乎没有的urlo一直在寻找。@Delirious莴苣不确定,为什么这很荒谬,任何正则表达式都可以使用。这是一个通用的解决方案。您的正则表达式是正确的,但当您有较短的方法时,就不需要使用该正则表达式了it@SonuKumar我不确定你是否读过这个问题,但OP认为url中唯一会改变的部分是在哪里星号为
uid=*actcode=*
。此正则表达式将匹配OP似乎根本不寻找的大量URL。请在您的答案中添加。这将帮助其他人。请在您的答案中添加。这将帮助其他人。