Python实战 - Django自动化创建sitemap

什么是sitemap

自建网站的朋友应该都了解过sitemap, 百度的站长平台和谷歌的Search Console都允许站长提交sitemap.xml。

那么这个文件具体有啥作用呢:就小T老师看来,最大的作用就是让搜索引擎更加友好的收录你的URL, 也就是网站链接。

如果一个网站没有sitemap,正常情况下,爬虫会从首页开始遍历提取网站链接,然后再进行抓取,这个过程一般来说会比较漫长,尤其涉及到链接的更新的时候。

对于搜索引擎来说是一个巨大的网络消耗,对于站长来说则收录会比较慢。

sitemap的出现,让网站可以更有效率的方式来提供链接给搜索引擎,省却中间环节,加量不加价:P

如何创建sitemap文件

  1. 人肉办法 这个办法比较土,也就是按照sitemap的协议,人工去修改调整sitemap文件,如果对于小型个人博客网站,考虑到更新频率一般不会特别高,省事的话也可行。

  2. 自动化办法 通过自动化脚本来生成,这个就很灵活了,可以通过各种自动化脚本,按照模板来生成,不做讨论

  3. 利用框架自动生成 框架有很多,考虑本篇主要以Python作为示例,所以选择一个Python下比较流行的Django框架作为例子来说明,直接上代码:

from django.contrib.sitemaps import views as sitemaps_views
from django.contrib.sitemaps import Sitemap

from .models import Article

class ArticleSitemap(Sitemap):
    changefreq = "monthly"
    priority = 1.0
    limit = 100
    def items(self):
        return Article.objects.all()

    def lastmod(self, obj):
        return obj.create_time


sitemaps = {
    'article': ArticleSitemap,
}


urlpatterns = [
    url(r'^sitemap\.xml$',
        sitemaps_views.index,
        {'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}),
    url(r'^sitemap-(?P<section>.+)\.xml$',

另外,需要在settings.py的INSTALL_APP中加上django.contrib.sitemaps

Django框架自动生成sitemap的优点

  • 可以自动化生成sitemap.xml,不用人工维护
  • 如果有新增加的内容页面,也可以自动进行sitemap.xml的更新
  • sitemap.xml自动分页,这种情况是针对链接较多的时候,单个sitemap.xml会非常巨大,可以通过分页来解决。

场景化方案建议

  • 链接数较少的网站,小于10W级别 建议使用方案3,实际使用起来,简单,方便,不用人工参与,站长只用专心维护好内容即可

  • 链接数较多的网站,大于10W级别 建议使用方案2,通过脚本产生sitemap.xml的静态文件,然后通过nginx的来代理处理。为什么要这样做,由于如果采用方案2的话,每次爬虫访问sitemap文件,由于要进行分页,会频繁的count和limit计算,对数据库产生很大的负担,导致网站的服务能力急剧下降。

部署效果

当提交sitemap后,谷歌的反应是很迅速的,立即开始抓取,百度的反应比较慢,可能还需要对网站进行观察。