python爬取网页图片,解决“似乎不支持此文件格式”

直接说结论:

原因:

部分网站为了防盗链(站外下载),会验证请求来源,也就是请求头信息里所带的Referer字段,对于外来访问或字段为空,则拒绝访问。
比如我练习用的豆瓣图书,会验证请求是否来源于主站。

解决:

F12查看请求标头中Referer字段值,而后和UA一样加在头信息字典里,传递给requests.get()的headers参数。

详情:

学爬虫第二天,在进行整页图片爬取时碰到的问题。
跟着学习的b站视频up提供的练习网站关闭,改爬了豆瓣图书的书本封面图。

import requests, re, time

if __name__ == '__main__':
    url = 'https://book.douban.com/'
    headers = {'User-Agent':''}
    page_text = requests.get(url = url, headers = headers).text

	#正则匹配所有封面图片
    rex = '<li>.*?<div class="cover">.*?<img src="(.*?)".*?</li>'
    img_src_list = re.findall(rex, page_text, re.S)

	#遍历正则截取的source字串,依次get每张图片
    for src in img_src_list[:5]:  #方便测试只爬前5张
        time.sleep(0.3)
        filename = src.split('/')[-1]
        with open(filename, 'wb') as f:
            f.write(requests.get(url = src, headers = headers).content)
    #完毕
    print('Done.')

处理过报错后能够正常运行,但保存下来的图片无法打开:
显示“似乎不支持此文件格式”

站内搜了一些同样的问题,普遍提到content属性错用成text属性、指定了错误的url、后缀名有误等,检查了这些确保无误后,还是没法解决。

注意到保存下来的文件很小(仅20B),把后缀改成.txt后是这样:
error code: dou15987

显然不是我认为的“不支持此文件格式”,应该是在向豆瓣请求图片的时候出了问题,只给我响应了一串报错码。

于是尝试直接粘贴了我正则匹配出来的src字串,访问发现确实加载不出图片,F12后如下:
403 Forbidden

于是在站内搜索到了一篇访问图片出现403 Forbidden的解决办法(因为是VIP文章只看了个头,我是穷鬼),其中提到了防盗链,以及http的一个请求头字段referer。

接下来就好解决了,从站内点开图片并F12确认一下标头:
在这里插入图片描述
是有一个Referer对应豆瓣图书主站的,于是在headers里加上:

    headers = {
    		'User-Agent':''
    		'Referer':'https://book.douban.com/'  #加在这里
    		}

解决!୧(๑•̀◡•́๑)૭

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值