遇到场景:在爬取相关网站时,刚开始一段时间可以爬,过了一段时间后则爬取报错 301 Moved Permanently,浏览器打开网站是正常打开。
以下是遇到该报错时的代码:

const charset = require('superagent-charset')
const request = require('superagent')
// 通过该网址和指定字符编码来爬取文章
request.get(url).charset(charset).timeout(20000).end(res=>{console.log(res.text))

为什么会遇到301?

因为网站通过识别cookie来进行反爬虫措施,当用户向目标网站发送请求时,会在请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页如果这个Cookie不存在则会返回一个cookie,这就形成了301重定向的报错返回。有些网站也会通过访问次数、访问频率或请求的header来判断是否为爬虫
此处,是由于爬虫默认不保存cookie,所以网站不断返回301,不断返回cookie,导致报错

解决思路:爬虫在第一次访问网站时保存cookie,然后在第二次访问时带上cookie访问网站即可
代码:

const charset = require('superagent-charset')
const request = require('superagent')
const agent = requset.agent()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
}
// 通过该网址和指定字符编码来爬取文章
agent.get(url).charset(charset).timeout(20000).catch(err => {if (err.status === 301) {headers.Cookie = err.response.headers['set-cookie'].toString()return agent.get(url).set(headers).charset(charset).timeout(20000)}return Promise.reject(err)})

agent对象在多次发起请求后,会将cookie保存下来

参考资料:

  1. 关于cookie持久化
  2. Saving cookies

node爬虫遇上301重定向Moved Permanently相关推荐

  1. node爬取app数据_从零开始写一个node爬虫(上)—— 数据采集篇

    爬虫相信大家都知道,这里我们从一个空的文件夹开始,也来写一写我们自己的爬虫程序吧. github入口 下一篇--数据分析篇入口 爬虫毕竟涉及到数据的爬取,所以其实有一个道德的约束,那就是Robots协 ...

  2. js如何将数据放在一个内置窗口里面_Java 爬虫遇上数据异步加载,试试这两种办法!...

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  3. java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  4. JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  5. 金融数据获取:当爬虫遇上要鼠标滚轮滚动才会刷新数据的网页(保姆级教程)

    目录 1. 谁这么会给我整活儿 2. Selenium模拟网页浏览器爬取 2.1 安装和准备工作 2.2.1 高度判断 2.2.2 顶部距离判断 3: 爬取内容 4: 完整代码,结果展示 1. 谁这么 ...

  6. HttpRequest failed state:301;Moved Permanently

    在请求下载图片的时候报错,原因是网站启动了https协议,但我依然使用http访问,就产生了重定向

  7. 301缓存重定向?301 Moved Permanently (from disk cache)

    今天在写一个博客系统时,发现首页数据经常刷新不出来,甚至后端根本就没有接受到这个请求,以为是Ajax的问题,但通过抓包发现Ajax请求确实已经发出去了,但状态码是 301 Moved Permanen ...

  8. 301 Moved Permanently问题排查与解决

    1.问题描述 技术支持反馈通知商户通知不到.即根据商户传过来的地址(举例:http://www.A.com)进行封装(封装后:http://www.A.com?trxNo=123)并请求商户,结果是失 ...

  9. PHP curl 执行结果老是301 Moved Permanently

    一.场景 二.解决 三.参考地址 一.场景 在浏览器访问一个路径,路径对应的方法里有一个请求第三方URL接口的方法,输出结果echo $result,打印如下: 二.解决 curl_setopt($c ...

最新文章

  1. OCRNet: 目标区域上下文信息的特征表达 | ECCV 2020
  2. phpstorm如何进行文件或者文件夹重命名
  3. 谷歌地图将很快显示电动汽车充电站
  4. 使用MONO使.net程序脱离.net框架运行
  5. RocketMQ消息存储结构分析及相对于Kafka的优势
  6. 涉众分析与硬数据采样(第六章)
  7. eclipse 输入提示插件_【STM32】搭建基于Eclipse平台的STM32调试环境
  8. Identity Server 4 - Hybrid Flow - MVC客户端身份验证
  9. 微信公众号:服务号、企业订阅号、个人订阅号的差异对比
  10. You Apple Developer Program membership expires in 12 days
  11. Asp.net页面跳转的方法
  12. 您认为做好测试计划工作的关键是什么?
  13. bootstrap之背景图+文字
  14. 简单介绍一下HBase、Cassandra、Voldemort、Redis、VoltDB、MySQL(转)
  15. Integer 十六进制
  16. PHP使用 Redis 实现消息队列
  17. 5G套餐打七折, 购机再现补贴“大战”
  18. bpm java_bpm完全解读
  19. 一个小白的BAT 文件编写之路
  20. 诺顿360偷偷挖矿被怒喷 官方却说:都是为了用户好

热门文章

  1. c语言中函数指针的定义和使用
  2. 基于react/vue开发一个专属于程序员的朋友圈应用
  3. DIY自动驾驶无人机
  4. 【网络安全】浅谈IP溯源的原理及方法
  5. ConcurrentHashMap 详解
  6. thrift 库使用心得
  7. 良心推荐PHP学习路线图
  8. 用vue开发一个公众号商城SPA——1.前期准备和写页面
  9. IOI2020国家队队员周雨扬的信息学竞赛之路
  10. 对酒店房间自助售货机的支付漏洞挖掘