从URL链接列表中解析文件名

时间:2017-10-18 10:43:21

标签: python parsing hyperlink filenames

好吧我正在使用从urls.txt中列出的网址下载文件的脚本。

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中创建它?

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

您可以随时解析链接。

使用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)