【爬虫】scrapy下载图片问题

scrapy爬虫入门很简单,推荐一个入门中文网站:[http://www.scrapyd.cn/doc/],在此不再赘述

一、 爬取图片时,能够拿到图片的url,但是使用scrapy的pipelines保存图片时,遇到了错误,报警如下:
[scrapy.core.engine] DEBUG: Crawled (404) <GET https://newimg.uumtu.com/Thumb/2019/0417/d026c93782fa0a9014d13a97195902d8.jpg> (refer
er: None)

当你用图片的url直接用浏览器访问时,也会出现访问不到的情况,如下:
在这里插入图片描述
当从爬虫的目标网站点击连接跳转到该图片时,就不会出现这样的情况。

此时,需要在请求的header里手动添加Referer

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
    'Referer': 'https://www.uumtu.com/weimei/41428_5.html',
}

class ImagespiderPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        yield scrapy.Request(url=item['imgurl'][0], meta={'item': item},headers=headers)

Referer的值,一般可以是你要爬取的网站的随便一个页面的url(一般不可能网站自己不认识自己的url),例如,我要保存的图片的url为https://newimg.uumtu.com/Thumb/2019/0422/c85e0cccaded41ab058f4a616ec104c4.jpg,那么我可以把Referer设置为https://www.uumtu.com/weimei/41428_5.html(该网站的一个页面)

二、Referer的作用
  • 防盗链
    假如在www.google.com里有一个www.baidu.com链接,那么点击这个www.baidu.com,它的header信息里就有:
Referer : http://www.google.com

假如www.baidu.com只允许自己的网站访问自己的图片服务器,那么www.baidu.com图片服务器每次取到Referer来判断一下是不是我自己的域名www.baidu.com,如果是就继续访问,不是就拦截。

  • 防止恶意请求
    这个就不多说了,我们爬取网站的过程,本身就是一种恶意的请求。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值