Python 使用URLSPILT从URL中仅获取域名
我有一个包含不同形式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
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)