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