好吧我正在使用从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中创建它?
答案 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)