仅从url提取域名,去掉路径(Python)
我一直在尝试从URL列表中提取域名,以便仅从url提取域名,去掉路径(Python),python,Python,我一直在尝试从URL列表中提取域名,以便http://supremecosts.com/contact-us/将变成http://supremecosts.com。我正试图找到一种干净的方法来实现这一点,它将适用于各种GTLD和CCTLD 您可以使用正则表达式提取URL的域和子域 /^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/\n]+)/im 我用这样的方式从URL中提取域。 检查这是否适用于您 一个正则表达式,用于解析和分解指向域名、协议和
http://supremecosts.com/contact-us/
将变成http://supremecosts.com
。我正试图找到一种干净的方法来实现这一点,它将适用于各种GTLD和CCTLD 您可以使用正则表达式提取URL的域和子域
/^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/\n]+)/im
我用这样的方式从URL中提取域。
检查这是否适用于您
一个正则表达式,用于解析和分解指向域名、协议和查询的完整URL,如下面的正则表达式
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
正则表达式的位置是这样的
url: RegExp['$&'],
protocol you are using at RegExp.$2
domain name at RegExp.$3
path at RegExp.$4
假设您正在使用
python3
,并且不想将regex
用于作业
>>> from urllib.parse import urlparse
>>> url = "http://supremecosts.com/contact-us/"
>>> obj = urlparse(url)
>>> obj
ParseResult(scheme='http', netloc='supremecosts.com', path='/contact-us/', params='', query='', fragment='')
>>> obj.geturl()
'http://supremecosts.com/contact-us/'
>>> obj.netloc
'supremecosts.com'
您可以像这样使用正则表达式:
import re
text = 'http://supremecosts.com/contact-us/'
m = re.search('(https?:\/\/[^:\/\n]+)', text)
if m:
print(m.group(1))
工作可能是一种愚蠢但有效的方法:
将URL保存为字符串并从后向前扫描。一旦你遇到一个句号,就把前面3格的所有东西都扔掉。我相信URL在域名之后没有句号。如果我错了,请纠正我。请记住一个提示-如果url来自您无法控制的来源,请记住“//supremecosts.com/contact-us/”也是有效的url。(例如没有http/https)回答得很好,干杯,但是如果标准库中有
urlparse
,为什么要使用基于正则表达式的解决方案呢?urlparse
也可以使用,但在这种情况下,您必须将方案
和netloc
合并以获得所需的结果,如:urlObj.scheme+”:/“+urlObj.netloc
。