遇到场景:在爬取相关网站时,刚开始一段时间可以爬,过了一段时间后则爬取报错 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('s