0

我有很多这样的链接http://example.com/2013/1520/i2013i1520p100049.htmlhttp://example.com/2013/89/i2013i89p60003.html

我需要将文件夹中的 HTML 文件分别保存为1520asi2013i1520p100049.html和文件夹“89”中的文件i2013i89p60003.html为 。

我可以剪断绳子,但其他人有另一个长度。

PS我正在使用Python。

4

7 回答 7

2

利用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)
于 2013-07-26T20:52:56.493 回答
2

您可以使用urlparse.urlsplitos.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
于 2013-07-26T20:56:58.323 回答
1

您可以使用以下内容(如果您想对其进行更复杂的工作):

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:]
于 2013-07-26T20:52:14.593 回答
1

只是为了它,一个基于正则表达式的答案:

match = re.search(r'([0-9]+)/([a-z0-9]+\.html)$', string)
if match:
    folder = match.group(1)
    file = match.group(2)
于 2013-07-26T23:10:45.283 回答
0

因此,使用这种标准化格式最快的方法是使用 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 时,这并不有趣

于 2013-07-26T20:51:29.097 回答
0
>>> 'http://example.com/2013/1520/i2013i1520p100049.html'.split('/')[-1]
'i2013i1520p100049.html'
于 2013-07-26T20:53:43.377 回答
0

您可以使用以下方法split()

url = 'http://example.com/2013/1520/i2013i1520p100049.html'
tokens = url.split('/')
file = parts[-1]
folder = parts[-2]
于 2013-07-26T20:54:12.343 回答