Python 查找http://和/或www.并从域中删除。离开domain.com
我对python还是个新手。我试图解析一个URL文件,只留下域名 我的日志文件中的一些URL以http://开头,一些以www开头。一些URL以两者开头 这是我的代码中剥离http://部分的部分。我需要添加什么才能同时查找http和www,并同时删除它们Python 查找http://和/或www.并从域中删除。离开domain.com,python,url,urlparse,Python,Url,Urlparse,我对python还是个新手。我试图解析一个URL文件,只留下域名 我的日志文件中的一些URL以http://开头,一些以www开头。一些URL以两者开头 这是我的代码中剥离http://部分的部分。我需要添加什么才能同时查找http和www,并同时删除它们 line = re.findall(r'(https?://\S+)', line) 当前,当我运行代码时,只有http://被剥离。如果我将代码更改为以下内容: line = re.findall(r'(https?://www.\S+)
line = re.findall(r'(https?://\S+)', line)
当前,当我运行代码时,只有http://被剥离。如果我将代码更改为以下内容:
line = re.findall(r'(https?://www.\S+)', line)
仅以两者开头的域受影响。
我需要代码更有条件性。
短暂性脑缺血发作
编辑。。。这是我的全部代码
import re
import sys
from urlparse import urlparse
f = open(sys.argv[1], "r")
for line in f.readlines():
line = re.findall(r'(https?://\S+)', line)
if line:
parsed=urlparse(line[0])
print parsed.hostname
f.close()
我被原来的帖子误认为是正则表达式。它确实在使用urlparse。您可以在这里不使用正则表达式
with open("file_path","r") as f:
lines = f.read()
lines = lines.replace("http://","")
lines = lines.replace("www.", "") # May replace some false positives ('www.com')
urls = [url.split('/')[0] for url in lines.split()]
print '\n'.join(urls)
文件输入示例:
http://foo.com/index.html
http://www.foobar.com
www.bar.com/?q=res
www.foobar.com
输出:
foo.com
foobar.com
bar.com
foobar.com
编辑:
可能会有一个棘手的url,比如foobarwww.com,上面的方法会剥离www。然后我们将不得不恢复使用正则表达式
将行lines=lines.替换为lines=re.sub(r'(www.(?!com)),r',lines)
。当然,每个可能的TLD都应该用于不匹配模式。请查看,它可以自动为您执行这些操作
>>> urlparse.urlsplit('http://www.google.com.au/q?test')
SplitResult(scheme='http', netloc='www.google.com.au', path='/q', query='test', fragment='')
对于这种特定的情况,这可能有些过分,但我通常会使用(Python2)或(Python3)
你可以用。此外,解决方案应该是通用的,以删除除域名前的“www”以外的内容(即处理像server1.domain.com这样的情况)。以下是一个快速的尝试,应该会奏效:
from urlparse import urlparse
url = 'http://www.muneeb.org/files/alan_turing_thesis.jpg'
o = urlparse(url)
domain = o.hostname
temp = domain.rsplit('.')
if(len(temp) == 3):
domain = temp[1] + '.' + temp[2]
print domain
我遇到了同样的问题。这是一个基于正则表达式的解决方案:
>>> import re
>>> rec = re.compile(r"https?://(www\.)?")
>>> rec.sub('', 'https://domain.com/bla/').strip().strip('/')
'domain.com/bla'
>>> rec.sub('', 'https://domain.com/bla/ ').strip().strip('/')
'domain.com/bla'
>>> rec.sub('', 'http://domain.com/bla/ ').strip().strip('/')
'domain.com/bla'
>>> rec.sub('', 'http://www.domain.com/bla/ ').strip().strip('/')
'domain.com/bla'
我相信@Muneeb Ali是最接近解决方案的,但当类似于frontdomain.domain.co.uk时,问题就出现了
我想:
for i in range(1,len(temp)-1):
domain = temp[i]+"."
domain = domain + "." + temp[-1]
有更好的方法吗?请注意:您确实意识到www.domain.com
不同于domain.com
,对吧,可能会指向完全不同的IP?关于域名www.www.com
和www.com
?重复:重复:我会删除我现有的帖子,现在我可以发表评论:)@DSM别担心,它没有被使用;)谢谢,这很有效:)你知道我如何删除.co.uk/.com等之后的所有内容吗?我不明白你所说的所有内容。你能举例说明吗?当然。有些URL是指向页面的链接。因此,在foo.com/index.htm的例子中,我只想留下foo.com,这太棒了,按照我的意愿工作。非常感谢。很抱歉,我觉得python的文档很难理解。你能解释一下你对代码所做的一些修改,让我了解一下它是如何工作的吗?再次感谢。对于以“http://”开头的URL不会立即生效urlparse.urlspit(“www.foo.com”)。netloc
将返回'
。是的,这是因为www.foo.com
不是有效的URL。问题是OP文件中的一些URL是这种格式。尝试以这种方式更改拆分结果。netloc
将导致引发属性错误。要更改netloc
,您需要使用\u replace
类似的replace=parsed.\u replace(netloc=host[4:])
我不会更改netloc
。是吗?
for i in range(1,len(temp)-1):
domain = temp[i]+"."
domain = domain + "." + temp[-1]