为了账号安全,请及时绑定邮箱和手机立即绑定

为什么有的图片url只能在html<img src="urllink">中显示,但无法在浏览器中直接

为什么有的图片url只能在html<img src="urllink">中显示,但无法在浏览器中直接

慕容3067478 2023-09-04 16:25:11
最近,我试图从网站下载一些图像。我在 html 中搜索显示的图像元素。然后,我在新选项卡上打开图像网址,但它返回 403 禁止页面。我复制该字符串并将其插入到另一个页面的html中,图像可以成功显示。我想请教一下是什么原因,以及如何下载图片。(我正在尝试通过 python request.get() 下载它)谢谢。
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

Referer当您请求图像时,此 Web 服务器会检查标头。要成功下载图像,必须Referer是图像所在的页面。它不关心User-Agent. 我假设当您将图像放入另一个页面时,该图像就会出现,因为您的浏览器缓存了该图像,并且实际上并未再次从服务器请求该图像。

通过使用浏览器的网络监控工具,您可以查看浏览器如何获取图像的 URL。在本例中,URL 不是原始 html 文档的一部分。您的浏览器执行了一些 JavaScript,解压缩 URL 并将一个img元素插入到div带有id="mangaBox". 因此,您不能使用 vanilla requests,因为它不执行 JavaScript。我使用了Requests-HTML。

下面的代码从您在评论中提供的链接下载图像,并将其保存到磁盘:

import os, urllib

from requests_html import HTMLSession


session = HTMLSession()

session.headers.update({"User-Agent": r"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",

                        "Referer": r"https://tw.manhuagui.com/comic/35275/481200.html"

                        })


url = r"https://tw.manhuagui.com/comic/35275/481200.html"


response = session.get(url)

print(response, len(response.content))


response.html.render()


img = response.html.find("img#mangaFile", first=True)

print("img element:", img)


url = img.attrs["src"]

print("image url:", url)


response = session.get(url)

print(response, len(response.content))


filename = os.path.basename(urllib.parse.urlsplit(url).path)

print("filename:", filename)


with open(filename, "wb") as f:

    f.write(response.content)

输出:


<Response [200]> 6715

img element: <Element 'img' alt='在地下城寻找邂逅难道有错吗? 第00话' id='mangaFile' src='https://i.hamreus.com/ps3/z/zdxcxzxhndyc_sddc/第00话/P0018.jpg.webp?cid=481200&md5=aAAP75PBy9DIa0bb8Hlwfw' class=('mangaFile',) data-tag='mangaFile' style='display: block; transform: rotate(0deg); transform-origin: 50% 50% 0px;' imgw='907'>

image url: https://i.hamreus.com/ps3/z/zdxcxzxhndyc_sddc/第00话/P0018.jpg.webp?cid=481200&md5=aAAP75PBy9DIa0bb8Hlwfw

<Response [200]> 186386

filename: P0018.jpg.webp

值得一提的是,除了当前页面的主图像之外,整个图像 URL 堆也被打包在script原始 html 文档的最后一个元素中。


<script type="text/javascript">window["\x65\x76\x61\x6c"](function(p,a,c,k,e,d)...


查看完整回答
反对 回复 2023-09-04
?
12345678_0001

TA贡献1802条经验 获得超5个赞

有些网站会在没有用户代理的情况下阻止请求,请尝试以下操作:


headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

requests.get(url, headers=headers)

查看完整回答
反对 回复 2023-09-04
  • 2 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信