采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,如上图,我设置了status为302的url返回我再一次处理,按照道理只要这个url返回的状态是302的都会被处理,实施证明了也进入了这个函数,我把url写入了一个文件,我等到scrapy没有页面可爬的时候在elasticsearch中搜索这些url没发现写入数据,所以我就有疑问,我这样写对吗?
这样写其实看起来有道理,但是在某些情况下也可以说有点多余,为什么呢? 引起302可能会有3种情况:1. 某些url才会引起302,但是这些url并不是我们的目标url,比如未登录的时候,我们点击了一个需要登录才能访问的url,就好比“个人中心”,这个时候是会返回302的,但是这种url其实并不是我们关心的,因为我们使用了
crawlspider所以所有的url都会被跟进,但是我们自己写spider就不会去跟进这种url,这种就没有必要记录下来。 2. 某些url才会引起的302,并不是所有的url都会引起,这种情况下可以写入 3.当被反爬的时候,这个时候所有后续的url都可能会被302,这个时候并不是当前的url,对你来说更重要的可能是1.停止爬虫 2. 重新规划爬取速度 3. 模拟登录拿到cookie后续的所有的request才能继续抓取。 这个时候就没有必要记录下来,因为遇到这种问题你需要停下来想办法染过这个问题
老师,您的回答很全面,我是被反爬虫了,302跳转的页面实际上是一个需要验证的页面,需要点击一下才能继续访问,但是我的response.url的地址是直指详情页面,我本地浏览器访问,是可以的,我这里之所以要问,能不能在crawlspider,yield出一个url,是因为这个url就是我之前需要爬取的页面,我设置了随机代理IP,我想用随机的IP和随机的UserAgent 绕过这个反爬虫,因为我不知道从哪里再请求这个页面,我不想丢失这个页面的数据
如果是这样 就可以记录在文件中或者redis中,我个人是比较喜欢用redis的
好的,谢谢老师
登录后可查看更多问答,登录/注册
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
4.7k 30
2.5k 18
1.1k 18
1.3k 15
2.7k 15