Python 使用URLSPILT从URL中仅获取域名

Python 使用URLSPILT从URL中仅获取域名,python,dataset,urllib,Python,Dataset,Urllib,我有一个包含不同形式URL的数据集(例如https://stackoverflow.com, https://www.stackoverflow.com,stackoverflow.com),我只需要像stackoverflow这样的域名 我使用了urllib中的parse.urlspit(url),但在我的例子中效果不佳 我怎样才能得到域名 编辑: 我的代码: def normalization (df): df['after_urlsplit'] = df["httpx"].map(la

我有一个包含不同形式URL的数据集(例如
https://stackoverflow.com, https://www.stackoverflow.com,stackoverflow.com
),我只需要像
stackoverflow
这样的域名

我使用了
urllib
中的
parse.urlspit(url)
,但在我的例子中效果不佳

我怎样才能得到域名

编辑:

我的代码:

def normalization (df):
  df['after_urlsplit'] = df["httpx"].map(lambda x: parse.urlsplit(x))
  return df

normalization(df_sample)
输出:

            httpx                       after_urlsplit
0   https://stackoverflow.com/       (https, stackoverflow.com, /, , )
1   https://www.stackoverflow.com/   (https, www.stackoverflow.com, /, , )
2   www.stackoverflow.com/           (, , www.stackoverflow.com/, , )
3   stackoverflow.com/               (, , stackoverflow.com/, , )
新答案,也适用于URL和主机名 要处理没有协议定义的实例(例如
example.com
),最好使用正则表达式:

重新导入
URL=['www.stackoverflow.com',
"stackoverflow.com",,
'https://stackoverflow.com',
'https://www.stackoverflow.com/',
“www.stackoverflow.com”,
"stackoverflow.com",,
'https://subdomain.stackoverflow.com/']
对于url中的url:
host_name=re.search(“^(?:.*://)?(.*)$”,url)。组(1)。拆分('.')[-2]
打印(主机名)
这将在所有情况下打印
stackoverflow

旧答案,仅适用于URL 您可以使用urlspit返回的
netloc
值,另外还可以进行一些额外的裁剪,以获得所需的域(部分):

从urllib.parse导入urlspilt
m=URLSPILT('http://subdomain.example.com/some/extra/things')
打印(m.netloc.split('.')[-2])
这将打印
示例


(但是,在
http://localhost/some/path/to/file.txt

处理此类问题的最佳方法是使用。

您可以使用正则表达式(regex)执行此任务

import re

URL = "https://www.test.com"
result = re.search("https?:\/\/(www.)?([\w\.\_]+)", URL)
print(result.group(2))

# output: test.com

urlspilt
解析器遵循RFC1808,RFC1808指出,如果方案不存在且URL不以斜杠开头,则它是一个
rel_路径,并且没有净位置
stackoverflow.com
单独将不会被解释为主机名,而是被解释为相对路径。浏览器中的链接工作原理相同,只是地址栏更具容错性。如果域名前只有
www.
,它就不起作用了,例如
www.stackoverflow.com
。另一方面,
www.example.com
只是一个路径,而不是URL。编辑了我的原始答案,添加了一个regex版本来处理主机名/路径和URL。如果在某些示例中我只有
www
而不是
http://www.
在这一点上,我们可以使用
from urllib import parse url=>https://stackoverflow.com/“parsed_url=parse.urlspit(url)解析了_url.netloc
,然后按“.”拆分,但是如果我没有netloc部分,我无法拆分,为什么不使用正则表达式呢?您可以使用:result.group(1)+result.group(2)