请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

crawlspider中能yield出去 Request的吗?

图片描述
老师您好,如上图,我设置了status为302的url返回我再一次处理,按照道理只要这个url返回的状态是302的都会被处理,实施证明了也进入了这个函数,我把url写入了一个文件,我等到scrapy没有页面可爬的时候在elasticsearch中搜索这些url没发现写入数据,所以我就有疑问,我这样写对吗?

正在回答

1回答

这样写其实看起来有道理,但是在某些情况下也可以说有点多余,为什么呢? 引起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才能继续抓取。 这个时候就没有必要记录下来,因为遇到这种问题你需要停下来想办法染过这个问题

0 回复 有任何疑惑可以回复我~
  • 提问者 WittChen #1
    老师,您的回答很全面,我是被反爬虫了,302跳转的页面实际上是一个需要验证的页面,需要点击一下才能继续访问,但是我的response.url的地址是直指详情页面,我本地浏览器访问,是可以的,我这里之所以要问,能不能在crawlspider,yield出一个url,是因为这个url就是我之前需要爬取的页面,我设置了随机代理IP,我想用随机的IP和随机的UserAgent 绕过这个反爬虫,因为我不知道从哪里再请求这个页面,我不想丢失这个页面的数据
    回复 有任何疑惑可以回复我~ 2020-02-17 17:39:33
  • bobby 回复 提问者 WittChen #2
    如果是这样 就可以记录在文件中或者redis中,我个人是比较喜欢用redis的
    回复 有任何疑惑可以回复我~ 2020-02-18 18:15:17
  • 提问者 WittChen 回复 bobby #3
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2020-02-19 09:57:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信