Загрузка и сохранение PDF-файлов с частичной ссылки? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь загрузить и сохранить все файлы из: https://www.bankia.es/es/pymes-y-autonomos/buscador-documentacion-precontractual

Доступно более 1200 файлов, поэтому я подумал об использовании какого-то цикла.Я понял, что все они содержат один и тот же частичный href: href = "/ estaticos / documentsmentosPRIIPS / xxxx.PDF"

Вот что я попробовал:

soup = BeautifulSoup(html_doc, 'html.parser')
savepath = 'my_path' # set the desired path here for the files


options = webdriver.ChromeOptions() 
options.add_experimental_option('prefs',  {
    "download.default_directory": "my_path",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "plugins.always_open_pdf_externally": True
    }
)
url_bankia= "https://www.bankia.es/es/pymes-y-autonomos/buscador-documentacion-precontractual"
bankia_request = requests.get(url_bankia)
bankia_web = BeautifulSoup(bankia_request.text, "html.parser")
bankia_web.find_all("a", href=re.compile(r"^/estaticos/documentosPRIIPS/"))

1 Ответ

0 голосов
/ 03 июня 2019

Почему вы хотите использовать селен, когда вы можете добиться того же, используя модуль запросов? Оказывается, этот самый URL содержит ответ json, из которого вы можете извлечь значение nombre_de_fichero, а затем добавить к последней части этого https://www.bankia.es/estaticos/documentosPRIIPS/, чтобы создать полноценную ссылку на pdf-файлы. Одна такая ссылка должна выглядеть как https://www.bankia.es/estaticos/documentosPRIIPS/AC-AM-AP-EX-12M-EUR-CAD-20190508.PDF.

Следующий скрипт создаст папку на вашем рабочем столе с именем PdfFolder, в которую предполагается загрузить файлы.

import os
import requests

link = 'https://www.bankia.es/estaticos/documentosPRIIPS/json/jsonSimple.txt'
base = 'https://www.bankia.es/estaticos/documentosPRIIPS/{}'

dirf = os.environ['USERPROFILE'] + "\Desktop\PdfFolder"
if not os.path.exists(dirf):os.makedirs(dirf)
os.chdir(dirf)

res = requests.get(link,headers={"User-Agent":"Mozilla/5.0"})
for item in res.json():
    if not 'nombre_de_fichero' in item: continue
    link = base.format(item['nombre_de_fichero'])
    filename = item['nombre_de_fichero'].split('.')[-2] + ".PDF"
    with open(filename, 'wb') as f:
        f.write(requests.get(link).content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...