本文首发于 https://imagician.net/archives/93/ 。欢迎到我的博客 https://imagician.net/ 了解更多。
**前排提示:**本文是一个入门级教程,讲述基本的爬虫与服务器关系。诸如无头浏览器、js挖取等技术暂不讨论。
面对大大小小的爬虫应用,反爬是一个经久不衰的问题。网站会进行一些限制措施,以阻止简单的程序无脑的获取大量页面,这会对网站造成极大的请求压力。
**要注意的是,**本文在这里说的是,爬取公开的信息。比如,文章的标题,作者,发布时间。既不是隐私,也不是付费的数字产品。网站有时会对有价值的数字产品进行保护,使用更复杂的方式也避免被爬虫“窃取”。这类信息不仅难以爬取,而且不应该被爬取。
网站对公开内容设置反爬是因为网站把访问者当做**“人类”,人类会很友善的访问一个又一个页面,在页面间跳转,同时还有登录、输入、刷新等操作。机器像是“见了鬼”**一股脑的“Duang Duang Duang Duang”不停请求某一个Ajax接口,不带登录,没有上下文,加大服务器压力和各种流量、带宽、存储开销。
比如B站的反爬
package main
import (
"github.com/zhshch2002/goribot"
"os"
"strings"
)
func main() {
s := goribot.NewSpider(goribot.SpiderLogError(os.Stdout))
var h goribot.CtxHandlerFun
h= func(ctx *goribot.Context) {
if !strings.Contains(ctx.Resp.Text,"按时间排序"){
ctx.AddItem(goribot.ErrorItem{
Ctx: ctx,
Msg: "",
})
ctx.AddTask(goribot.GetReq("https://www.bilibili.com/video/BV1tJ411V7eg"),h)
ctx.AddTask(goribot.GetReq("https://www.bilibili.com/video/BV1tJ411V7eg"),h)
ctx.AddTask(goribot.GetReq("https://www.bilibili.com/