我有很多这样的链接http://example.com/2013/1520/i2013i1520p100049.html
或http://example.com/2013/89/i2013i89p60003.html
。
我需要将文件夹中的 HTML 文件分别保存为1520
asi2013i1520p100049.html
和文件夹“89”中的文件i2013i89p60003.html
为 。
我可以剪断绳子,但其他人有另一个长度。
PS我正在使用Python。
利用split()
url = 'http://example.com/2013/1520/i2013i1520p100049.html'
parts = url.split('/')
fn = parts[-1]
dir = parts[-2]
然后拨打电话,保存源代码:
import urllib2
fp = urllib2.urlopen(url).read()
fullpath_fn = dir + '/' + fn
with open(fullpath, 'w') as htmlfile:
htmlfile.write(fp)
您可以使用urlparse.urlsplit和os.path.split:
import os
import urlparse
s = 'http://example.com/2013/1520/i2013i1520p100049.html'
path = urlparse.urlsplit(s).path
print(path)
# /2013/1520/i2013i1520p100049.html
dirname, basename = os.path.split(path)
dirname, basedir = os.path.split(dirname)
print(basedir)
# 1520
print(basename)
# i2013i1520p100049.html
您可以使用以下内容(如果您想对其进行更复杂的工作):
s = 'http://example.com/2013/1520/i2013i1520p100049.html'
from operator import itemgetter
from urlparse import urlsplit
split_url = urlsplit(s)
path, fname = itemgetter(2, -1)(split_url.path.split('/'))
print path, fname
# 1520 i2013i1520p100049.html
否则:
path, fname = s.rsplit('/', 2)[1:]
只是为了它,一个基于正则表达式的答案:
match = re.search(r'([0-9]+)/([a-z0-9]+\.html)$', string)
if match:
folder = match.group(1)
file = match.group(2)
因此,使用这种标准化格式最快的方法是使用 find 和 slice :)。正则表达式不值得
例如
>>> a = "http://example.com/2013/1520/i2013i1520p100049.html or http://example.com/2013/89/i2013i89p60003.html"
>>> lastindex = a.rfind('/')
>>> a[lastindex+1:]
'i2013i89p60003.html'
>>> a[a.rfind('/',0,lastindex)+1:lastindex]
'89'
在一个巨大的 url 中拆分 vs 查找(是的,这些存在,但通常不会这么大)
>>> a = range(10000)
>>> [a.insert(randint(0,10000),'/') for x in range(0,100)]
>>> a = str(a)
>>> b = time.time(); a.rfind('/'); time.time()-b
58493
1.8835067749023438e-05
>>> b = time.time(); d=a.split('/'); time.time()-b
0.00012683868408203125
更重要的是,您不需要对列表进行巨大的重新分配/副本,当您拥有 1000 个 URL 时,这并不有趣
>>> 'http://example.com/2013/1520/i2013i1520p100049.html'.split('/')[-1]
'i2013i1520p100049.html'
您可以使用以下方法split()
:
url = 'http://example.com/2013/1520/i2013i1520p100049.html'
tokens = url.split('/')
file = parts[-1]
folder = parts[-2]