node爬虫遇上301重定向Moved Permanently
遇到场景:在爬取相关网站时,刚开始一段时间可以爬,过了一段时间后则爬取报错 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保存下来
参考资料:
- 关于cookie持久化
- Saving cookies
node爬虫遇上301重定向Moved Permanently相关推荐
- node爬取app数据_从零开始写一个node爬虫(上)—— 数据采集篇
爬虫相信大家都知道,这里我们从一个空的文件夹开始,也来写一写我们自己的爬虫程序吧. github入口 下一篇--数据分析篇入口 爬虫毕竟涉及到数据的爬取,所以其实有一个道德的约束,那就是Robots协 ...
- js如何将数据放在一个内置窗口里面_Java 爬虫遇上数据异步加载,试试这两种办法!...
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- 金融数据获取:当爬虫遇上要鼠标滚轮滚动才会刷新数据的网页(保姆级教程)
目录 1. 谁这么会给我整活儿 2. Selenium模拟网页浏览器爬取 2.1 安装和准备工作 2.2.1 高度判断 2.2.2 顶部距离判断 3: 爬取内容 4: 完整代码,结果展示 1. 谁这么 ...
- HttpRequest failed state:301;Moved Permanently
在请求下载图片的时候报错,原因是网站启动了https协议,但我依然使用http访问,就产生了重定向
- 301缓存重定向?301 Moved Permanently (from disk cache)
今天在写一个博客系统时,发现首页数据经常刷新不出来,甚至后端根本就没有接受到这个请求,以为是Ajax的问题,但通过抓包发现Ajax请求确实已经发出去了,但状态码是 301 Moved Permanen ...
- 301 Moved Permanently问题排查与解决
1.问题描述 技术支持反馈通知商户通知不到.即根据商户传过来的地址(举例:http://www.A.com)进行封装(封装后:http://www.A.com?trxNo=123)并请求商户,结果是失 ...
- PHP curl 执行结果老是301 Moved Permanently
一.场景 二.解决 三.参考地址 一.场景 在浏览器访问一个路径,路径对应的方法里有一个请求第三方URL接口的方法,输出结果echo $result,打印如下: 二.解决 curl_setopt($c ...
最新文章
- OCRNet: 目标区域上下文信息的特征表达 | ECCV 2020
- phpstorm如何进行文件或者文件夹重命名
- 谷歌地图将很快显示电动汽车充电站
- 使用MONO使.net程序脱离.net框架运行
- RocketMQ消息存储结构分析及相对于Kafka的优势
- 涉众分析与硬数据采样(第六章)
- eclipse 输入提示插件_【STM32】搭建基于Eclipse平台的STM32调试环境
- Identity Server 4 - Hybrid Flow - MVC客户端身份验证
- 微信公众号:服务号、企业订阅号、个人订阅号的差异对比
- You Apple Developer Program membership expires in 12 days
- Asp.net页面跳转的方法
- 您认为做好测试计划工作的关键是什么?
- bootstrap之背景图+文字
- 简单介绍一下HBase、Cassandra、Voldemort、Redis、VoltDB、MySQL(转)
- Integer 十六进制
- PHP使用 Redis 实现消息队列
- 5G套餐打七折, 购机再现补贴“大战”
- bpm java_bpm完全解读
- 一个小白的BAT 文件编写之路
- 诺顿360偷偷挖矿被怒喷 官方却说:都是为了用户好