Python: Jak pobrać PDF z US Department of Commerce używając requests.
Na stronie
https://232app.azurewebsites.net/Forms/ExclusionRequestItem/800
znajduje się przycisk "View attachment file", który pozwala ściągnąć PDF.
Problem jest, że ten przycisk nie ma href z bezpośrednim linkiem do PDF ale on używa JavaScript do jego pobrania.
Pierswsza pomysł to użyć[Selenium](https://selenium-python.readthedocs.io/) aby to pobrać ale używając DevTools (zakładka: Network, opcja: Presist Logs) w Firefox można zobaczyć, że ten przycisk wysyła zapytanie pod adres
https://232app.azurewebsites.net/Forms/ExclusionRequestItem/800?handler=DownloadDM&ID=800
i dostaje dane JSON z "downloadURL", który zawiera link do PDF.
Tak więc używając requests z pierwszym adrese można pobrać dane JSON z linkiem do PDF a potem można użyć ponownie requests do pobrania PDF.
import requests import webbrowser number = 800 url = f'https://232app.azurewebsites.net/Forms/ExclusionRequestItem/{number}?handler=DownloadDM&ID={number}' r = requests.get(url) data = r.json() print('url:', data["downloadURL"]) filename = f'output-{number}.pdf' r = requests.get(data["downloadURL"]) with open(filename, 'wb') as fh: fh.write(r.content) # open PDF in default program webbrowser.open(filename)
Używając innej liczby niż 800 można pobrać PDF z innych stron.
Notes:
Stackoverflow: Python Webscrape: hidden strange url link that is not available in page source
Buy a Coffee