2 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
Referer
當(dāng)您請(qǐng)求圖像時(shí),此 Web 服務(wù)器會(huì)檢查標(biāo)頭。要成功下載圖像,必須Referer
是圖像所在的頁(yè)面。它不關(guān)心User-Agent
.?我假設(shè)當(dāng)您將圖像放入另一個(gè)頁(yè)面時(shí),該圖像就會(huì)出現(xiàn),因?yàn)槟臑g覽器緩存了該圖像,并且實(shí)際上并未再次從服務(wù)器請(qǐng)求該圖像。
通過(guò)使用瀏覽器的網(wǎng)絡(luò)監(jiān)控工具,您可以查看瀏覽器如何獲取圖像的 URL。在本例中,URL 不是原始 html 文檔的一部分。您的瀏覽器執(zhí)行了一些 JavaScript,解壓縮 URL 并將一個(gè)img
元素插入到div
帶有id="mangaBox"
.?因此,您不能使用 vanilla?requests
,因?yàn)樗粓?zhí)行 JavaScript。我使用了Requests-HTML。
下面的代碼從您在評(píng)論中提供的鏈接下載圖像,并將其保存到磁盤:
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='在地下城尋找邂逅難道有錯(cuò)嗎? 第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
值得一提的是,除了當(dāng)前頁(yè)面的主圖像之外,整個(gè)圖像 URL 堆也被打包在script原始 html 文檔的最后一個(gè)元素中。
<script type="text/javascript">window["\x65\x76\x61\x6c"](function(p,a,c,k,e,d)...

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
有些網(wǎng)站會(huì)在沒(méi)有用戶代理的情況下阻止請(qǐng)求,請(qǐng)嘗試以下操作:
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)
- 2 回答
- 0 關(guān)注
- 185 瀏覽
添加回答
舉報(bào)