我正在使用python并尝试获取网址的特定部分,如下所示
from urlparse import urlparse as ue
url = "https://www.google.co.in"
img_url = ue(url).hostname
结果
www.google.co.in
情形1 :
实际上我会有一些网址(存储在列表中或其他地方),所以我想要的是,需要在网址中找到上面的domain name
并在{{1之后获取部分在www.
之前,这是字符串在.co.in
之后和first dot
之前开始,在当前方案中仅生成second dot
。
因此假设给出的url是url google
,我应该只获取www.gmail.com
,所以无论给出的url,代码都应该获取以第一个点开头的部分第二点。
情况2:
也可以直接在网址中直接提供一些网址,例如gmail
,而网址中不包含domain.com, stackoverflow.com
,在这种情况下,它应仅提取www
和stackoverflow
。
最后我的目的是从domain
这样的网址中获取主要名称.....
一般来说,如果我有一个网址,我可以使用gmail, stackoverflow, google
并获取字符串,但我会有一些溃疡,所以需要像上面提到的那样动态获取想要的部分
有谁能告诉我如何满足上述概念?
答案 0 :(得分:2)
为什么你不能这样做:
from urlparse import urlparse as ue
urls = ['https://www.google.com', 'http://stackoverflow.com']
parsed = []
for url in urls:
decoded = ue(url).hostname
if decoded.startswith('www.'):
decoded = ".".join(decoded.split('.')[1:])
parsed.append(decoded.split('.')[0])
#parsed is now your parsed list of hostnames
此外,您可能希望更改for循环中的if语句,因为某些域可能会从您想要删除的其他内容开始。
答案 1 :(得分:1)
如何使用一组预定义的顶级域名?
import re
from urlparse import urlparse
#Fake top level domains... EG: co.uk, co.in, co.cc
TOPLEVEL = [".co.[a-zA-Z]+", ".fake.[a-zA-Z]+"]
def TLD(rgx, host, max=4): #4 = co.name
match = re.findall("(%s)" % rgx, host, re.IGNORECASE)
if match:
if len(match[0].split(".")[1])<=max:
return match[0]
else:
return False
parsed = []
urls = ["http://www.mywebsite.xxx.asd.com", "http://www.dd.test.fake.uk/asd"]
for url in urls:
o = urlparse(url)
h = o.hostname
for j in range(len(TOPLEVEL)):
TL = TLD(TOPLEVEL[j], h)
if TL:
name = h.replace(TL, "").split(".")[-1]
parsed.append(name)
break
elif(j+1==len(TOPLEVEL)):
parsed.append(h.split(".")[-2])
break
print parsed
它有点hacky,对某些人来说可能有些神秘,但它确实有诀窍,而且还有其他事情要做:)
答案 2 :(得分:0)
这是我的解决方案,最后,域包含您期望的域名列表。
import urlparse
urls = [
'https://www.google.com',
'http://stackoverflow.com',
'http://www.google.co.in',
'http://domain.com',
]
hostnames = [urlparse.urlparse(url).hostname for url in urls]
hostparts = [hostname.split('.') for hostname in hostnames]
domains = [p[0] == 'www' and p[1] or p[0] for p in hostparts]
print domains # ==> ['google', 'stackoverflow', 'google', 'domain']
首先,我们使用urlparse.urlparse()
从网址列表中提取主机名。 主机名列表如下所示:
['www.google.com','stackoverflow.com,...]
在下一行中,我们将每个主机分成几部分,使用点作为分隔符。 hostparts中的每个项目如下所示:
[[''','google','com'],['stackoverflow','com'],...]
有趣的工作在下一行。这一行说,“如果点之前的第一部分是 www ,则域是第二部分(p [1])。否则,域是第一部分(p [0]) 。 domains 列表如下所示:
['google','stackoverflow','google','domain']
我的代码不知道如何处理login.gmail.com.hk。我希望别人可以解决这个问题因为我迟到了。 更新:看看John Kurkowski的 tldextract ,它应该做你想做的事。