我正在尝试从一个网站上抓取图像URL并在另一个网站上显示图像(使用BeautifulSoup),但是有问题的网站(yupoo.com)具有某种保护措施,如果您不这样做,则可以从其服务器加载图像不要浏览他们的网站。
如何重现我的问题:
您无法加载此图像: https://photo.yupoo.com/0832club_v/0058b582/96f83ddb.jpeg
现在访问此网站:https://0832club.x.yupoo.com/29611853?uid=1
现在打开上面的链接 “ https://photo.yupoo.com/0832club_v/0058b582/96f83ddb.jpeg”和 它现在可以工作的某些原因...
我检查了cookie和其他东西,但我真的不明白它们如何保护图片
答案 0 :(得分:0)
您必须发送标头<div class = "row" style="display: flex;align-items: center;">
<div class = "col-md-8">
<h3><%= link_to item.title, item , id: "font-colour" %></h3>
<p><%= if item.description.length > 70
item.description[0..70].gsub(/\s\w+\s*$/, '...')
else
item.description
end
%></p>
</div>
<%= link_to complete_item_path(item), id: "font-colour", method: :patch do %>
<i class="fa fa-square-o fa-2x align-center"></i>
<% end %>
<div class = "col-md-1">
<%= link_to item_path(item), id: "font-colour", method: :delete do %>
<i class="fa fa-trash fa-2x align-center"></i>
<%end%>
</div>
</div>
,然后服务器认为它是从页面referer
加载的。
https://0832club.x.yupoo.com/29611853?uid=1
在import requests
url = 'https://photo.yupoo.com/0832club_v/0058b582/96f83ddb.jpeg'
headers = {
'referer': 'Referer: https://0832club.x.yupoo.com/29611853?uid=1'
}
r = requests.get(url, headers=headers)
print(r.content[:100]) # you can see string `JFIF` or `GIF` in content
f = open('output.jpg', 'wb')
f.write(r.content)
f.close()
中,我在referer
中看到字符串JFIF
,因此它发送了content
。如果没有JPG
,我会在referer
中看到字符串GIF
,所以它会发送content
您还可以检查
GIF
使用print(r.headers['Content-Type'])
返回referer
,不使用image/jpeg
返回referer