我正在尝试从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/"))
答案 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)