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

2024.10 山西大同·云冈石窟内的一群鸭鸭

软约定

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 创建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的来将爬虫导向错误页面来阻止其行为。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
   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;
}
}