从 url 个链接列表中解析文件名

Parsing the file name from list of url links

好的,所以我正在使用从 urls.txt 中列出的 URL 下载文件的脚本。

import urllib.request

with open("urls.txt", "r") as file:
    linkList = file.readlines()
for link in linkList:
    urllib.request.urlretrieve(link)

不幸的是,由于我的 urllib.request.urlretrieve 函数中缺少第二个参数,它们被保存为临时文件。由于我的文本文件中有数千个链接,因此无法单独命名它们。问题是文件名包含在这些链接中,即 /DocumentXML2XLSDownload.vm?firsttime=true&repengback=true&d‌ ocumentId=XXXXXX&xsl‌ FileName=rher2xml.xs‌ l&outputFileName=XXX‌ X_2017_06_25_4.xls 其中文件名位于 outputFileName=

之后

有没有一种简单的方法来解析文件名,然后在 urllib.request.urlretrieve 函数中将它们用作辅助参数?我正在考虑在 excel 中提取这些名称并将它们放在另一个文本文件中,该文件将以与 urls.txt 类似的方式读取,但我不确定如何在 Python 中实现它。或者有没有办法在不使用 excel 的情况下在 python 中独占?

您可以使用 urlparse 和 parse_qs 来获取查询字符串

from urlparse import urlparse,parse_qs
parse = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html?name=Python&version=2')
print(parse_qs(parse.query)['name'][0]) # prints Python

您可以随时随地解析 link。

使用 regular expression 的示例:

import re

with open("urls.txt", "r") as file:
    linkList = file.readlines()
for link in linkList:
    regexp = '((?<=\?outputFileName=)|(?<=\&outputFileName=))[^&]+'
    match = re.search(regexp, link.rstrip())

    if match is None:
        # Make the user aware that something went wrong, e.g. raise exception
        # and/or just print something
        print("WARNING: Couldn't find file name in link [" + link + "]. Skipping...")
    else:
        file_name = match.group(0)
        urllib.request.urlretrieve(link, file_name)