我们使用scrapy shell来进行调试是很方便的,但是有时会出现403错误的问题,我们来解决这个问题:
出现403,表示网站拒绝提供服务
因为有的网站有反爬机制,当你使用scrapy shell的时候是以是scrapy爬虫的标识进行访问网站的,这时候网站会拒绝为爬虫提供服务,这时候就会返回403错误
下面列举三个方案来解决这个问题,三个方案的原理都是一样的,即修改user-agent的值,使用浏览器的标识来对网站进行访问,这样网站就不会拒绝服务了
方案一:只治标.
在使用scrapy shell的时候,在其后面加上-s USER_AGENT='Mozills/5.0’
eg: 我们要对百度进行scrapy shell的时候
scrapy shell http://www.baidu.com -s USER_AGENT='Mozills/5.0'
成功!!!
方案二:半治标半治本.
修改scrapy项目里的settings.py USER_AGENT
把settings.py里的USER_AGENT的属性启用并修改
修改前:
#USER_AGENT = 'yi (+http://www.yourdomain.com)'
修改后:
USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0'
再次使用scrapy shell:
(注意:这里的scrapy shell只能在项目里使用,直接在cmd中使用是不生效的,这也是为什么说半治标的原因)
scrapy shell https://movie.douban.com/top250
我们看一下返回的信息:
response <200 https://movie.douban.com/top250>
返回200,成功!!!
方案三: 治本.
修改整个python的default_settings.py文件里的默认USER_AGENT值
之后在不管是在项目中还是在cmd中使用scrapy shell,都是以浏览器的标识符来进行访问的了
找一下default_settings.py文件的位置
我的default_settings.py文件在C:\ProgramData\Anaconda3\Lib\site-packages\scrapy\settings下
找到文件位置后,打开文件,修改 USER_AGENT的值
原USER-AGENT的值:
USER_AGENT = 'Scrapy/%s (+http://scrapy.org)' % import_module('scrapy').__version__
改为
USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0'
再进行scrapy shell:
scrapy shell https://movie.douban.com/top250
看一下返回的信息:
response <200 https://movie.douban.com/top250>
返回200,成功!!!