要从部分href下载并保存PDF吗?

时间:2019-06-03 19:30:39

标签: python web-scraping beautifulsoup

我正在尝试从https://www.bankia.es/es/pymes-y-autonomos/buscador-documentacion-precontractual

下载并保存所有文件

有超过1200个文件可用,因此我正在考虑使用某种循环。我意识到它们全部包含相同的部分href:href =“ / estaticos / documentosPRIIPS / 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 :(得分:0)

当您可以使用请求模块实现相同的功能时,为什么还要使用硒?原来,这个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)