尝试从图像 url 下载图像,但得到的是 html

Try to download image from image url, but get html instead

类似于,但该解决方案对我不起作用。

from BeautifulSoup import BeautifulSoup
import urllib2
import requests

img_url='http://7-themes.com/data_images/out/79/7041933-beautiful-backgrounds-wallpaper.jpg'

r = requests.get(img_url, allow_redirects=False)

headers = {}
headers['Referer'] = r.headers['location']

r = requests.get(img_url, headers=headers)
with open('7041933-beautiful-backgrounds-wallpaper.jpg', 'wb') as fh:
    fh.write(r.content)

下载的文件仍然是 html 页面,而不是图像。

您的引荐来源网址设置不正确。我对引荐来源网址进行了硬编码,它工作正常

from BeautifulSoup import BeautifulSoup
import urllib2
import requests

img_url='http://7-themes.com/data_images/out/79/7041933-beautiful-backgrounds-wallpaper.jpg'

r = requests.get(img_url, allow_redirects=False)

headers = {}
headers['Referer'] = 'http://7-themes.com/7041933-beautiful-backgrounds-wallpaper.html'

r = requests.get(img_url, headers=headers, allow_redirects=False)
with open('7041933-beautiful-backgrounds-wallpaper.jpg', 'wb') as fh:
    fh.write(r.content)

我在我的代码中发现根本原因是 header 中的引用字段仍然是 html,而不是图像。

所以我将引用字段更改为 img_url,这有效。

from BeautifulSoup import BeautifulSoup
import urllib2
import urllib
import requests

img_url='http://7-themes.com/data_images/out/79/7041933-beautiful-backgrounds-wallpaper.jpg'

headers = {}
headers['Referer'] = img_url

r = requests.get(img_url, headers=headers)

with open('7041933-beautiful-backgrounds-wallpaper.jpg', 'wb') as fh:
    fh.write(r.content)