WarLock WarLock - 2 years ago 118
Python Question

Renaming the file downloaded with Python Requests

How can I replace the name of

file which is downloaded with Python Requests?

I want to save it as
not as

CSV file looks like:

Manual_name1 https://www.adndrc.org/diymodule/doc_panellist/Elkinson%20Jeffrey.pdf
Manual_name2 http://www.parliament.bm/uploadedFiles/Content/House_Business/Presentation_of_Papers_and_of_Reports/PCA%20Report%209262014.pdf
manual_name3 http://www.ohchr.org/Documents/HRBodies/OPCAT/elections2016/HaimoudRamdan.pdf

My current code:

import os
import csv
import requests

write_path = 'C:\\Users\\hgdht\\Desktop\\Downloader_Automation' # ASSUMING THAT FOLDER EXISTS!

with open('Links.csv', 'r') as csvfile:
spamreader = csv.reader(csvfile)
for link in spamreader:
if not link:
pdf_file = link[0].split('/')[-1]
with open(os.path.join(write_path, pdf_file), 'wb') as pdf:
# Try to request PDF from URL
print('TRYING {}...'.format(link[0]))
a = requests.get(link[0], stream=True)
for block in a.iter_content(512):
if not block:

except requests.exceptions.RequestException as e: # This
will catch ONLY Requests exceptions
print(e) # This should tell you more details about the error

Answer Source

Instead of

pdf_file = link[0].split('/')[-1]

use the specific column from the csv file:

pdf_file = link[1]  # (assuming the file name is in the second column)

If the file name is in the first column, you should use

pdf_file = link[0]  # (assuming the file name is in the first column)
# OR
import time  # put this in the beginning of your script
pdf_file = '{}-{}.pdf'.format(link[0], int(time.time()))
# file name will look like: "name-1495460691.pdf"

but then you will have to change the reference to the link itself when calling it with requests:

a = requests.get(link[1], stream=True)  # (assuming the link is in the second column)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download