# -*- coding: utf-8 -*-
import re
import sys
import requests
reload(sys)
sys.setdefaultencoding("utf-8")
if __name__ == '__main__':
url = 'https://movie.douban.com/subject/1433330/photos?type=W'
# 获取网页源码
html = requests.get(url)
# 抓每个图片链接
pic_url = re.findall('<img src="https://(.*?)" />', html.text, re.S) #此链接为预览链接
i = 0
for each in pic_url:
raw = re.sub('thumb','raw',each,re.S) //将预览链接中的thumb替换成raw,便成了高清图片链接
print 'now download..'+'https://'+raw
pic = requests.get('https://'+raw)
f = open('hp\\'+str(i)+'.jpg','wb')
f.write(pic.content)
f.close()
i += 1
刚开始学爬虫,爬豆瓣电影的壁纸练手。现在程序可以跑下来,不返回错,但是下载的图片是失败的,response 返回 403 forbidden。
我这样想问题的原因对吗?
因为我想下高清的,但是豆瓣查看高清壁纸前,需要登录,但我的程序是没有登录的,所以出现403是吗?所以我得模拟登陆是吗?
刚注册,木有悬赏币。。谢谢
403就是告诉你没有权限,这个服务器做了判断,需要对用户身份做验证,一般会通过cookie等,所以你没有登陆就没办法访问。
你可以使用代理ip,可以使用神箭手云爬虫,自带ip代理的爬虫。
alert(1)在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制。
403应该是因为ip频次受控,可以用一下IPIDEA,ip池量大包含地区广爬虫业务完全可以实现而且能提高工作效率。
之前做过很多爬虫处理,其实你要懂,不是每个网站都那么好爬虫的。
对方:例如豆瓣为了防止访问量过大,服务器压力的承受,所以就啪啪啪整个403给你(服务器理解客户的请求,但拒绝处理它)。
他给你返回403,就是告诉你一种状态,根据他告诉你的态度,你作为男朋友的是不是应该改改自己的脾气。例如,对方发现你没有加header,对方发现你Cookies不对,或者是发现你的访问速度过快,所以就直接block你了。
很多这样衍生的问题,作为一个聪明的Crawler,你应该知道怎么爬对方的东西,才让对方服务器把你判断为人,而不是爬虫程序。
总之一句,根据反馈的错误信息,去思考应该怎么处理问题。这里没有给出详细的答案,但是你可以尝试着去理解豆瓣的block机制。