【问题标题】:Python Retrieve File while Ignoring RedirectPython在忽略重定向时检索文件
【发布时间】:2014-03-14 17:37:27
【问题描述】:

我正在开发一个程序,该程序使用 Beautiful Soup 抓取网站,然后使用 urllib 检索在网站上找到的图像(使用图像的直接 URL)。我正在抓取的网站不是图像的原始主机,但确实链接到原始图像。我遇到的问题是,对于某些网站,检索 www.example.com/images/foobar.jpg 会将我重定向到主页 www.example.com 并生成一个空 (0 KB) 图像。事实上,去www.example.com/images/foobar.jpg 也会重定向。在我正在抓取的网站上很有趣,图像显示正常。

我在 SO 上看到了一些示例,但它们都解释了如何在绕过重定向时从网站捕获 cookie、标头和其他类似数据,但我无法让它们为我工作。有没有办法防止重定向并将图像存储在www.example.com/images/foobar.jpg

这是保存图像的代码块:

from urllib import urlretrieve

...

for imData in imList:
    imurl = imData['imurl']
    fName = os.path.basename(URL)
    fName,ext =  os.path.splitext(fName)
    fName += "_%02d"%(ctr,)+ext
    urlretrieve(imurl,fName)
    ctr += 1

处理所有抓取的代码太长太合理了。但我已经验证在 imData['imurl'] 中包含图像的准确 url,例如 http://upload.wikimedia.org/wikipedia/commons/9/95/Brown_Bear_cub_in_river_1.jpg。然而,某些图像重定向如下:http://www.public-domain-image.com/public-domain-images-pictures-free-stock-photos/fauna-animals-public-domain-images-pictures/bears-public-domain-images-pictures/brown-bear-in-dog-salmon-creek.jpg

【问题讨论】:

  • 您使用的实际代码会有所帮助。但尝试设置User-agent 标头(请参阅此thread)。

标签: python beautifulsoup urllib


【解决方案1】:

您尝试从中下载图像的网站可能会进行额外检查以限制屏幕抓取量。一个常见的检查是 Referer 标头,您可以尝试将其添加到 urllib 请求中:

req = urllib2.Request('<img url>')
req.add_header('Referer', '<page url / domain>')

例如,我的浏览器对此使用的请求,来自您引用的网站的羊驼图像包括一个引用标头:

Request URL:http://www.public-domain-image.com/cache/fauna-animals-public-domain-images-pictures/alpacas-and-llamas-public-domain-images-pictures/alpacas-animals-vicugna-pacos_w725_h544.jpg
Request Method:GET
....
Referer:http://www.public-domain-image.com/fauna-animals-public-domain-images-pictures/alpacas-and-llamas-public-domain-images-pictures/alpacas-animals-vicugna-pacos.jpg.html
User-Agent:Mozilla/5.0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2018-06-09
    • 2013-11-11
    相关资源
    最近更新 更多