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;
}

相关主题: