如何从自动开始下载的链接中保存PDF?

时间:2019-08-22 10:03:07

标签: python web-scraping

我正在尝试抓取并保存在您单击URL后自动开始下载的pdf文件,例如:https://ec.europa.eu/research/participants/documents/downloadPublic?documentIds=080166e5b0a3b62d&appId=PPGMS

我一直在尝试使用urllib,但没有成功。

2 个答案:

答案 0 :(得分:0)

您尝试过吗?

String str="already data exists = [ abc,xyz,123 ]";
String replacedStr = str.replaceAll("Already Po Exits =", "");
String replacedStr1 = replacedStr.replaceAll("\\[", "");

答案 1 :(得分:0)

鉴于下载是由javascript启动的,最通用的解决方案是使用实际执行javascript的浏览器。

在一般情况下,带有无头PhantomJS的硒驱动程序应该可以解决问题。

在这种情况下(对于此页面),执行下载的代码非常简单:

<script type="text/javascript">
$('document').ready(function(){
    window.location='https://ec.europa.eu/research/participants/documents/downloadPublic/NXBvSk9oSlVwSFhueUcxNlJDUnNOSGVnOEpNWkVvWDlveDFoalRUb3E2VC8yVHlIU3hYMFVBPT0=/attachment/VFEyQTQ4M3ptUWNRa2R4dEZ6MkU3endWb2dWSDJHNTM=';
});
</script>

您可以先下载页面,解析以window.location开头的url,然后下载它指向的文件(只需确保您包括html页面返回的cookie)。这会很脆弱,因为对该页面的实现进行的任何更改都可能破坏它。

这是使用requests的方法:

import re
import requests
s = requests.Session()
response = s.get('https://ec.europa.eu/research/participants/documents/downloadPublic?documentIds=080166e5b0a3b62d&appId=PPGMS')
url_pattern = re.compile("window.location='(?P<url>.*)';")
html = response.text
match_result = url_pattern.search(html)
url = match_result.group('url')
content_response = s.get(url)
file_content = content_response.content
with open('/tmp/file.pdf', 'wb') as f:
    f.write(file_content)