Python实战 - Django自动化创建sitemap
什么是sitemap
自建网站的朋友应该都了解过sitemap, 百度的站长平台和谷歌的Search Console都允许站长提交sitemap.xml。
那么这个文件具体有啥作用呢:就小T老师看来,最大的作用就是让搜索引擎更加友好的收录你的URL, 也就是网站链接。
如果一个网站没有sitemap,正常情况下,爬虫会从首页开始遍历提取网站链接,然后再进行抓取,这个过程一般来说会比较漫长,尤其涉及到链接的更新的时候。
对于搜索引擎来说是一个巨大的网络消耗,对于站长来说则收录会比较慢。
sitemap的出现,让网站可以更有效率的方式来提供链接给搜索引擎,省却中间环节,加量不加价:P
如何创建sitemap文件
人肉办法 这个办法比较土,也就是按照sitemap的协议,人工去修改调整sitemap文件,如果对于小型个人博客网站,考虑到更新频率一般不会特别高,省事的话也可行。
自动化办法 通过自动化脚本来生成,这个就很灵活了,可以通过各种自动化脚本,按照模板来生成,不做讨论
利用框架自动生成 框架有很多,考虑本篇主要以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后,谷歌的反应是很迅速的,立即开始抓取,百度的反应比较慢,可能还需要对网站进行观察。