【问题标题】:Get domain from string? - Python从字符串中获取域? - Python
【发布时间】:2012-06-28 21:58:10
【问题描述】:

我需要帮助。如何从字符串中获取域?

例如:“Hi im Natsume,查看我的网站http://www.mysite.com/

我如何获得 mysite.com

输出示例:

http://www.mysite.com/(如果输入了 http)

www.mysite.com(如果未输入 http)

mysite.com(如果未输入 http 和 www)

【问题讨论】:

  • 你试过什么?您是否考虑过在字符串中搜索某些定义特征?

标签: python string url dns


【解决方案1】:

最好的方法是使用正则表达式来提取 URL。然后使用tldextract从URL中获取有效域名。

import re
import tldextract

text = "Hi im Natsume, check out my site http://www.example.com/"
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)
found_url = urls[0]
info = tldextract.extract(found_url)
domain_name = info.domain
suffix_name = info.suffix
final_domain_name  = domain_name+"."+suffix_name
print(final_domain_name)

【讨论】:

  • @user_3pij 查看我制作的模组。 URL 大写而不是突出显示,因为在这种情况下它不是方法或代码。一旦您看到他们将此评论标记为删除。
【解决方案2】:
myString = "Hi im Natsume, check out my site http://www.mysite.com/"
>>> a = re.search("(?P<url>https?://[^\s]+)", myString) or re.search("(?P<url>www[^\s]+)", myString)
>>> a.group("url")
'http://www.mysite.com/'
>>> myString = "Hi im Natsume, check out my site www.mysite.com/"
>>> a = re.search("(?P<url>https?://[^\s]+)", myString) or re.search("(?P<url>www[^\s]+)", myString)
>>> a.group("url")
'www.mysite.com/'

【讨论】:

  • 好的,如果用户没有输入 http,我现在如何获取 URL?我的意思是它可以接受是否输入http,也可以接受输入或不输入www
  • @Nastume 使用 re.search("(?Pwww[^\s]+)", myString).group("url")
  • 嗯,如果用户没有输入 http 或 www ,它仍然无法接受:(
  • @Nastume 可以为您的案例提供示例输入和输出
  • 到目前为止我只能这样做 re.search("(?P(https?|www)[^\s]+)", a).group("url")但是如果没有输入http或www仍然无法接受
【解决方案3】:

如果所有网站都具有相同的格式,您可以使用这样的正则表达式(在这种特定情况下有效):

re.findall('http://www\.(\w+)\.com', url)

但是,您需要一个更复杂的正则表达式来解析任何 url 并提取域名。

【讨论】:

  • 如果域有这样的结构,my-web-site.com (\w+) 只找到“站点”
【解决方案4】:

如果你想使用正则表达式,一种方法可能是 -

>>> s = "Hi im Natsume, check out my site http://www.mysite.com/"
>>> re.findall(r'http\:\/\/www\.([a-zA-Z0-9\.-_]*)\/', s)
['mysite.com']

..考虑url以'/'结尾

【讨论】:

  • 啊,我有点喜欢你的代码。但是如果用户没有输入http://或www,如何获取域?
  • 在这种情况下,你可以简单地做 - &gt;&gt;&gt; s = "Hi im Natsume, check out my site mysite.com" &gt;&gt;&gt; [t for t in s.split() if '.com' in t] ['mysite.com']
  • 我修改的正则表达式 -> raw = re.findall(r'([a-zA-Z0-9\.]*)([a-zA-Z0-9\/]*) ', url),如果输入了 http:// 或 www,并且 url 位于字符串的开头、结尾或中间,我很想使正则表达式查找域
【解决方案5】:
s= "Hi im Natsume, check out my site http://www.mysite.com/"
start=s.find("http://") if s.find("http://")!=-1 else s.find("https://")+1
t = s[start+11:s.find(" ",start+11)]
print(t)

输出: mysite.com

【讨论】:

    【解决方案6】:

    嗯...您需要一些方法来定义您认为是具有“域”的东西。一种方法可能是查找 URL 匹配的正则表达式,并将其应用于字符串。如果成功,您至少知道该字符串包含一个 URL,并且可以继续解释该 URL 以查找主机名,然后您可以从中提取域(可能)。

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2021-07-09
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多