Django项目中添加robots.txt的四种方法
前言
robots.txt是用来告诉爬虫,哪些资源可以抓取,哪些不能抓取。对于一个网站来说非常常见。
例如http://www.taobao.com/robots.txt
User-agent: Baiduspider
Allow: /article
Allow: /oshtml
Allow: /ershou
Allow: /$
Disallow: /product/
Disallow: /
User-Agent: Googlebot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-agent: Bingbot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-Agent: 360Spider
Allow: /article
Allow: /oshtml
Allow: /ershou
Disallow: /
User-Agent: Yisouspider
Allow: /article
Allow: /oshtml
Allow: /ershou
Disallow: /
User-Agent: Sogouspider
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /ershou
Disallow: /
User-Agent: Yahoo! Slurp
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
User-Agent: *
Disallow: /
可以看到淘宝其实对于资源是做了很多限制的。
那么我们在Django项目中,如何高效的实现robots.txt呢。
方法1 - 最简单的一行代码搞定
from django.http import HttpResponse
...
urlpatterns.append(
url(r'^/robots.txt', lambda x: HttpResponse("User-Agent: *\nDisallow:", content_type="text/plain"), name="robots_file"))
这个解决方案的优点是, 它足够简单,允许所有爬虫访问所有的页面。
缺点是缺少可扩展性。如果您要添加多个规则,这种方法很快就会失控。此外,正常情况下urls.py文件最好简单处理,不要加其他的业务逻辑。
方法2 - 模板搞定
这是最直观的方法,只需将robots.txt文件放入主模板目录下
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
...
(r'^robots\.txt$', direct_to_template,
{'template': 'robots.txt', 'mimetype': 'text/plain'}),
)
只需记住将MIME类型适当地设置为text/plain,然后保存即可。
优点是它的简单性,如果你已经有一个想要重用的robots.txt文件,那就没有开销。
缺点是如果您的robots.txt经常更改,则需要每次都将更改推送到Web服务器。这可能会变得单调乏味。
方法3 - Django App实现
最后,有一个完整的django应用程序,您可以安装并放入您的INSTALLED_APPS:它被称为django-robots。
对于小型项目,这个方法其实重了,但如果您有很多规则,或者如果您需要网站管理员来更改它们而不将更改推送到Web服务器,那么这是您的首选应用。
方法4 - 修改nginx配置
location /robots.txt {
alias /path/to/static/robots.txt;
}
展开剩余53%