如何从javascript获取Beautifulsoup中的图像?

问题描述 投票:0回答:1

在我的学校,我们有一个交互式白板,我们可以将它们导出到带有提供的链接的网站。唯一的问题是链接过期了(这很愚蠢),所以我想制作一个简单的 python 脚本来获取图像并下载它们。

以下是网站链接:https://air.ifpshare.com/documentPreview.html?s_id=8ec97e16-51c4-4a77-9f64-7d5dccd9bb41#/detail/561f0184-384c-4ca1-91a4-b2e687865408/record

当我打开 chrome 并检查网站时,我看到图像包含在主分隔符中,其中包含子分隔符和图像元素,这些元素以 Base 64 编码图像。因此,很容易在 python 中解码它们。

这是我编写的用于获取 html 的简单脚本:

import requests

page = requests.get("https://air.ifpshare.com/documentPreview.html?s_id=8ec97e16-51c4-4a77-9f64-7d5dccd9bb41#/detail/561f0184-384c-4ca1-91a4-b2e687865408/record")
print(page.text)

唯一的问题是,当我尝试获取 html 时,我没有得到任何内容...... 内容似乎来自网站中的 JavaScript。

当我使用 Selenium 时也会发生同样的事情

这是我得到的:

<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=stylesheet href=//at.alicdn.com/t/font_833191_27456hr9ow5.css><title id=PageTitle></title><style>html,
    body {
      max-width: 480px;
      height: 100%;
      margin: auto;
      background-size: 100% 100%;
      background: #F8F8F8;
    }</style><link href=/static/css/documentPreview.01a0856b7f615fdfd7f4b853e047bcd0.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.a3f705024b2774dd271e.js></script><script type=text/javascript src=/static/js/vendor.03a8b2ef6819d9eaa4e7.js></script><script type=text/javascript src=/static/js/documentPreview.a9f6fe7b5c4d6f073050.js></script></body></html> 

有人知道解决方法吗?

python selenium-webdriver web-scraping beautifulsoup
1个回答
0
投票

注意:此答案包含实现目标的不同方法。

我看到您的目标 Web 应用程序从 API 端点获取图像下载 URL,并且使用请求库和少量代码可以轻松获取这些图像(如果需要,无需使用 bs4)。

这是 API 端点

https://air.ifpshare.com/api/pub/files/UUID

那么您的目标 URL 中的文件 UUID 是什么?

  • 您提供的网址:
    https://air.ifpshare.com/documentPreview.html?s_id=8ec97e16-51c4-4a77-9f64-7d5dccd9bb41#/detail/561f0184-384c-4ca1-91a4-b2e687865408/record
  • 文件 UUID:在
    /detail/
    路径之后,您将看到一个
    UUID
    值,嗯,这是您的文件
    UUID

现在将此文件 UUID 与 API 端点合并,您将从 JSON 响应中获取

downloadUrl
值,这是完整的下载 URL,以下是代码:

import requests

def fetchResp(UUID):
    n = 0
    url = f"https://air.ifpshare.com/api/pub/files/{UUID}"
    response = requests.get(url)
    items = response.json()['items']
    for urls in items:
        image = urls['downloadUrl']
        image_url = f"https:{image}" #missing HTTP in the response value so added this manually
        n = n + 1
        image_data = requests.get(image_url).content
        with open(f"image-{n}.png", 'wb') as image_d:
            image_d.write(image_data)
fetchResp('561f0184-384c-4ca1-91a4-b2e687865408') #file UUID is here
© www.soinside.com 2019 - 2024. All rights reserved.