从网址中删除随机字符

时间:2016-12-14 01:35:23

标签: python replace strip

我有一个网址列表如下:

urls = [
www.example.com?search?q=Term&page=0,
www.example.com?search?q=Term&page=1,
www.example.com?search?q=Term&page=2
]

术语可能是我们想要的任何术语:EuropeLondon等。

我的代码部分(在整个代码中)如下:

for url in urls:
  file_name = url.replace('http://www.example.com/search?q=','').replace('=','').replace('&','')
  file_name = file_name+('.html')

导致:

Termpage0.html
Termpage1.html
and so on..

如何将URL列表中的Term删除为:

page0.html
page1.html
and so on?

3 个答案:

答案 0 :(得分:5)

您可以使用urllib.parse来解析URL,然后解析查询部分。这种方法的好处是,如果更改了查询部件的顺序或添加了新部件,它将工作相同:

from urllib import parse

urls = [
    'www.example.com?search?q=Term&page=0',
    'www.example.com?search?q=Term&page=1',
    'www.example.com?search?q=Term&page=2'
]

for url in urls:
    parts = parse.urlparse(url)
    query = parse.parse_qs(parts.query)
    print('page{}.html'.format(query['page'][0]))

输出:

page0.html
page1.html
page2.html

在上面urlparse返回包含网址组件的ParseResult对象:

>>> from urllib import parse
>>> parts = parse.urlparse('www.example.com/search?q=Term&page=0')
>>> parts
ParseResult(scheme='', netloc='', path='www.example.com/search', params='', query='q=Term&page=0', fragment='')

然后parse_qs将返回dict个值为列表的查询参数:

>>> query = parse.parse_qs(parts.query)
>>> query
{'page': ['0'], 'q': ['Term']}

答案 1 :(得分:2)

如果你只想要在最后一个&之后的最后一部分,那很简单:

url.split('&')[-1].replace('=', '') + '.html'

答案 2 :(得分:0)

继续您正在做的事情并使用str.replace

for url in urls:
  file_name = url.replace('http://www.example.com/search?q=','').replace('=','').replace('&','').replace('Term', '')
  file_name = file_name+('.html')

示例:

>>> urls = ['www.example.com/search?q=Term&page=0', 'www.example.com/search?q=Term&page=1', 'www.example.com/search?q=Term&page=2']
>>> for url in urls:
...   file_name = url.replace('www.example.com/search?q=','').replace('=','').replace('&','').replace('Term', '')
...   file_name = file_name+('.html')
...   print (file_name)
page0.html
page1.html
page2.html

如果条款是随机的,请使用re.sub,如下所示:

re.sub('Term|Term1|Term2', '', file_name)

或者,如果在程序运行之前该术语未知:

pattern = re.compile("|".join(map(str.strip, sys.stdin.readlines())))
pattern.sub('', file_name)

示例:

>>> for url in urls:
...   file_name = url.replace('www.example.com/search?q=','').replace('=','').replace('&','')
...   file_name = re.sub('Term|Term1|Term2', '', file_name)
...   file_name = file_name+('.html')
...   print file_name
... 
page0.html
page1.html
page2.html