1.什么是狀態(tài)碼301,302
301 Moved Permanently(永久重定向) 被請求的資源已永久移動到新位置,并且將來任何對此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個URI之一宠进。
解決(一)
1.在Request中將scrapy的dont_filter=True
,因為scrapy是默認(rèn)過濾掉重復(fù)的請求URL绘梦,添加上參數(shù)之后即使被重定向了也能請求到正常的數(shù)據(jù)了
# example
Request(url, callback=self.next_parse, dont_filter=True)
解決(二)
在scrapy框架中的 settings.py
文件里添加
HTTPERROR_ALLOWED_CODES = [301]
解決(三)
使用requests模塊遇到301和302問題時
def website():
'url'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch, br',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'Host': 'pan.baidu.com',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
url = 'https://www.baidu.com/'
html = requests.get(url, headers=headers, allow_redirects=False)
return html.headers['Location']
allow_redirects=False
的意義為拒絕默認(rèn)的301/302重定向從而可以通過html.headers[‘Location’]拿到重定向的URL。