Python Webscrape: 页面源中不存在的隐藏奇怪 url link

Python Webscrape: hidden strange url link that is not available in page source

我目前正致力于从门户中提取一些信息。我想要做的是将 url link 提取到外部 PDF 文件。我要抓取的网站是 https://232app.azurewebsites.net/Forms/ExclusionRequestItem/800。我试图抓取的信息是带有“查看附件文件”按钮的 BIS 决策备忘录部分 linked to an external PDF file

"View attachment file" button

问题来了:当我查看页面源代码时,我没有找到任何与 PDF 文件相关的 url link:

                    <div>
                        <h3>BIS Decision Memo</h3>
                        <div class="jumbotron">
                            <div class="row form-group">
                                <div class="col-sm-12" id="DMAttachment">
                                    <span>Please wait...</span>
                                    <a href="" data-id="800" data-type="DM">View attachment file</a><br />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                                    <div class="row form-group">
                    <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 text-left">

但是,当单击“查看附件”按钮时,我能够下载 PDF 文件。我用PDF文件查看我的下载路径,我发现PDF文件的link地址如下:

https://itaisinternationaltrade.sharepoint.com/sites/232App/_layouts/15/download.aspx?UniqueId=a18de65a-7092-4670-8c9a-9315a62f1814&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvaXRhaXNpbnRlcm5hdGlvbmFsdHJhZGUuc2hhcmVwb2ludC5jb21AYTFkMTgzZjItNmM3Yi00ZDlhLWI5OTQtNWYyZjMxYjNmNzgwIiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwIiwibmJmIjoiMTYwOTEwNTMyNiIsImV4cCI6IjE2MDkxMDg5MjYiLCJlbmRwb2ludHVybCI6Ik8zcVZjS2N6WC9mSjlkeVU2SzlpcG1hVFRsQWNOblkvamZ5RUFPMmxUT2c9IiwiZW5kcG9pbnR1cmxMZW5ndGgiOiIxNDciLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImNpZCI6Ik5HSTJPVE5pTldRdE1EQTNOaTAwWWpFekxUZzVOek10WW1VME1qa3dNalF3TmpZMiIsInZlciI6Imhhc2hlZHByb29mdG9rZW4iLCJzaXRlaWQiOiJOMlUyT1dReU9HRXRabUUxT0MwME56SmtMVGxtWVdVdFlUZ3pZMk0zWldZME1HSXoiLCJhcHBfZGlzcGxheW5hbWUiOiIyMzJBcGkiLCJuYW1laWQiOiI3MDQ3M2M5OC0wNzIyLTQ1MDEtYWJhZi1kOWEyNWNmM2FlN2RAYTFkMTgzZjItNmM3Yi00ZDlhLWI5OTQtNWYyZjMxYjNmNzgwIiwicm9sZXMiOiJhbGxzaXRlcy5tYW5hZ2UgYWxsZmlsZXMud3JpdGUiLCJ0dCI6IjEiLCJ1c2VQZXJzaXN0ZW50Q29va2llIjpudWxsfQ.R2FXb3pYOE4yN1VFajRRMUs3ME50QlZjdHZ6ZnljNSs4VFlQaUhiQitYRT0&ApiVersion=2.0

因此,我很好奇这个奇怪的url是从哪里来的。我把这个奇怪的url拆分成几个部分,从页面源码中一个一个地搜索,却找不到任何线索。因此,我想请教一些关于如何获得这个 url.

的提示

此外,我正在尝试抓取更多 PDF url links 像上面的那样:https://232app.azurewebsites.net/Forms/ExclusionRequestItem/801 因此,我想问一下有没有什么办法可以抓取这些PDF文件links?我应该如何处理这个问题?我现在拥有的是使用请求包:

import requests
url = 'https://232app.azurewebsites.net/Forms/ExclusionRequestItem/800'
html_data = requests.get(url).text

然后我尝试切片文本以提取 PDF url。但是,由于我无法从上面找到 PDF urls,所以我不知道我能做什么。请给我一些提示。非常感谢您!

当您单击此按钮时,此页面使用 JavaScript。

Firefox/Chrome 中使用 DevTools(并在 HTML 中挖掘)我发现此按钮向你的

发送请求

https://232app.azurewebsites.net/Forms/ExclusionRequestItem/800?handler=DownloadDM&ID=800

它获取 JSON 数据 link 为 PDF。

所以我用它来仅使用 requests

来获取文件
import requests
import webbrowser

number = 800

# generate URL with `800` in two places
url = f'https://232app.azurewebsites.net/Forms/ExclusionRequestItem/{number}?handler=DownloadDM&ID={number}'

# send requests to get JSON data with `data["downloadURL"]`
r = requests.get(url)
data = r.json()

print('url:', data["downloadURL"])

# create unique filename for PDF
filename = f'output-{number}.pdf'

# get PDF and save in file (usign bytes mode)
r = requests.get(data["downloadURL"])
with open(filename, 'wb') as fh:
    fh.write(r.content)

# open PDF in default program 
webbrowser.open(filename)

使用不同的号码可以获得不同的文件。