我需要帮助。如何从字符串中获取域?
例如:“嗨,我是夏目,查看我的网站http://www.mysite.com/ ”
我如何获得mysite.com?
输出示例:
http://www.mysite.com/(如果输入了 http)
www.mysite.com(如果未输入 http)
mysite.com(如果未输入 http 和 www)
我需要帮助。如何从字符串中获取域?
例如:“嗨,我是夏目,查看我的网站http://www.mysite.com/ ”
我如何获得mysite.com?
输出示例:
http://www.mysite.com/(如果输入了 http)
www.mysite.com(如果未输入 http)
mysite.com(如果未输入 http 和 www)
好吧...您需要某种方式来定义您认为具有“域”的东西。一种方法可能是查找 URL 匹配的正则表达式,并将其应用于字符串。如果成功,您至少知道该字符串包含一个 URL,并且可以继续解释该 URL 以查找主机名,然后您可以从中提取域(可能)。
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/'
如果所有站点都具有相同的格式,您可以使用这样的正则表达式(在这种特定情况下有效):
re.findall('http://www\.(\w+)\.com', url)
但是,您需要一个更复杂的正则表达式来解析任何 url 并提取域名。
如果你想使用正则表达式,一种方法可能是 -
>>> 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以'/'结尾
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
最好的方法是使用正则表达式来提取 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)