经过观察,我的小破站居然有一堆的爬虫在搜集。说起来,我这个整站大小才33M,一天整站的流量大约1GB,光Google的爬虫居然能有七八百兆的流量。也不知道它们都在干嘛。

  1. 10 山西大同·云冈石窟内的一群鸭鸭

软约定

Hexo本身输出的是一堆静态HTML页,其渲染生成的目标文件夹public下的内容是会被清空,然后再生成当期新的内容。所以,类似wordpress之类动态网站根目录直接丢robots。 txt来组织官方爬虫的行为是不行的。

# 创建robots.txt
touch blog/source/robots.txt

# _config.yml配置渲染豁免
skip_render:
- "robots.txt"

# 指定robots.txt内容
User-agent: Googlebot
User-agent: AdsBot-Google
User-agent: BaiduSpider
User-agent: YisouSpider
User-agent: 360Spider
User-agent: YodaoBot
Disallow: /

User-agent: SogouSpider
User-agent: Sosospider
User-agent: bingbot
Allow: /
Disallow: /categories/
Disallow: /tags/
Disallow: /about/
Disallow: /books/
Disallow: /movies/
Disallow: /netdata/
Disallow: /html/

User-agent: *
Disallow: /

Sitemap: https://www.sujx.net/sitemap.xml

# 重新生成站点
hexo clean
hexo g

参考链接:

[Robots.txt简介]https://developers.google.cn/search/docs/crawling-indexing/robots/intro?hl=zh-cn

硬约定

由于Robots。 txt只是提供一个建议值来约束爬虫的行为,并不能完全杜绝爬虫乱爬的行为。我们还可以使用Nginx的来将爬虫导向错误页面来阻止其行为。

   location / {
root /opt/blog/public;
index index.html;

#禁止Scrapy等工具的抓取
if ( $http_user_agent ~* ( Scrapy|Curl|HttpClient )) {
return 403;
}

#禁止指定UA及UA为空的访问
if ( $http_user_agent ~ "BaiduSpider|JiKeSpider|YandexBot|Bytespider|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|Ezooms|^$" ) {
return 404;
}

#禁止非GET|HEAD|POST方式的抓取, ~ 为模糊匹配 ~* 为模糊匹配不区分大小写
if ( $request_method !~ ^( GET|HEAD|POST )$ ) {
return 403;
}

if ( $http_user_agent ~ "Mozilla/4. 0\ \( compatible;\ MSIE\ 6. 0;\ Windows\ NT\ 5. 1;\ SV1;\ . NET\ CLR\ 1. 1. 4322;\ . NET\ CLR\ 2. 0. 50727\ )" ) {
return 404;
}
if ( $http_user_agent ~ "Mozilla/5. 0+( compatible;+Baiduspider/2. 0;++http://www.baidu.com/search/spider.html )" ) {
return 404;
}

if ( $http_user_agent ~ "Mozilla/5. 0 ( iPhone; CPU iPhone OS 9_1 like Mac OS X )( compatible; Baiduspider-render/2. 0; +http://www.baidu.com/search/spider.html )" ) {
return 404;
}

if ( $http_user_agent ~ "Mozilla/5. 0 ( Linux; Android 10; VCE-AL00 Build/HUAWEIVCE-AL00; wv )" ) {
return 404;
}
}