2016-08-30 3 views
0

Ich versuche ein Skript zu schreiben, das durch eine Liste von Landing Page URLs aus einer CSV-Datei iterieren, alle PDF-Links auf der Zielseite an eine Liste anhängen und dann durchlaufen Die Liste lädt die PDFs in einen bestimmten Ordner.Herunterladen von PDFs von Links mit Beautiful Soup

Ich bin ein bisschen auf den letzten Schritt stecken- Ich kann alle PDF-URLs bekommen, aber kann sie nur einzeln herunterladen. Ich bin nicht sicher, wie man am besten die Verzeichnisadresse ändert, um mit jeder URL zu ändern, um sicherzustellen, dass jeder seinen eigenen eindeutigen Dateinamen hat.

Jede Hilfe wäre willkommen!

from bs4 import BeautifulSoup, SoupStrainer 
import requests 
import re 

#example url 
url = "https://beta.companieshouse.gov.uk/company/00445790/filing-history" 
link_list = [] 
r = requests.get(url) 
soup = BeautifulSoup(r.content, "lxml") 

for a in soup.find_all('a', href=True): 
    if "document" in a['href']: 
     link_list.append("https://beta.companieshouse.gov.uk"+a['href']) 

for url in link_list: 

    response = requests.get(url) 

    with open('C:/Users/Desktop/CompaniesHouse/report.pdf', 'wb') as f: 
     f.write(response.content) 

Antwort

0

Die einfachste Sache ist nur eine Zahl zu jedem Dateinamen aufzuzählen mit Add:

for ind, url in enumerate(link_list, 1): 
    response = requests.get(url) 

    with open('C:/Users/Desktop/CompaniesHouse/report_{}.pdf'.format(ind), 'wb') as f: 
     f.write(response.content) 

Aber jeder Weg der Annahme endet in somne_filename.pdf und sie sind einzigartig Sie die Basisnamen verwenden können, selbst, die beschreibender sein kann:

from os.path import basename, join 
for url in link_list: 
    response = requests.get(url) 
    with open(join('C:/Users/Desktop/CompaniesHouse", basename(url)), 'wb') as f: 
     f.write(response.content) 
Verwandte Themen