Python web多sitemap创建更新解决方案

Python web多sitemap创建更新解决方案


这篇博客主要介绍本人对于Python web(这里使用的是Flask)使用多sitemap(即因为网站存在大量平均增长的页面)的解决思路与方案:

  • 两种sitemap自动创建更新解决方案对比
  • 方案详解

两种sitemap自动创建更新解决方案对比

方案一: 使用路由视图和模板语言自动生成

一般来说,使用python进行web开发,最简单的sitemap解决方法就是使用模板语言来创建sitemap.xml文件, 也就是的动态创建sitemap,这种方法的基本思路就是:
搜索引擎每次通过url访问该网站的sitemap文件的时候,通过路由从数据库中查询获取数据,然后填充到sitemap模板并返回.

这样做的好处以下几点:

1.除开网站的基本页面(如首页,登录页)以外,其余由由用户创建的网页(如博客,帖子)的sitemap的更新都不用管理员去手动或这调用任何命令去更新,因为搜索引擎每次访问的时候,就会自动返回从数据库中获取的最新的数据
2.简单方便,只需要写一个路由接口(视图)然后给出一个sitemap模板,就可以了.

一段Flask官网的自动生成sitemap的代码片段

这种方法虽然最简单方便,但是缺点也显而易见:

  • 由于单个sitemap文件中包含的url上限不能超过50000个,所以这种方法只适合用户基数以及网站页面不多的小型网站, 因为小型网站一般只有一个sitemap文件。
    所以说这种方法不适用于需要多个sitemap文件的页面较多的网站.
方案二:运用python的xml模块进行sitemap文件的创建与更新

这种方案,也是本人目前这里运用并将要详细介绍的方案。
这种解决方案,基本思路就是写一个集中控制sitemap文件创建和更新的方法,然后可将其作为命令调用,并设置为服务器定时任务对sitemap进行定时更新,或提供后台管理进行调用。
那么很明显,对比上面的方案一,这两种方案的最大区别就在于:

  • 除开网站基本页面的更新(如首页,登陆等)需要人为去修改以外,对于其余的平均增长的页面(如帖子,博客等),这种方案需要管理员或linux定时任务来调用更新sitemap的方法,而上面的方案一,则完全依赖于搜索引擎那边何时访问(更新)本网站的sitemap

这种方案虽然比上面的方案一要复杂很多,但是好处在于:

  1. 适用于用户基数和页面较多的网站,因为这种方法可以管理多个sitemap的创建和更新,这样就解决了单个sitemap中url上限的问题
  2. 由于是纯粹的靠python的xml模块来进行对sitemap文件的创建和更新,也就纯粹的对文件的读写操作,所以对sitemap文件的可控性更强
    比如,一个sitemap文件的内容更新后,需要根据这个sitemap文件更新的内容去更新另一个sitemap文件中的内容。

方案详解

**下面将详细讲解方案二的运用实例,这里我们主要使用的是python xml模块中的etree模块**

python xml.etree模块官方文档

注意:

etree模块对于读取非信任渠道的数据是有安全隐患的,如读取用户和前端传过来的数据,但这里我们用于操作自己网站的sitemap文件,所以这里不计较这个安全性问题。

首先说明一下这里的应用情景:这里我们有一个发帖的网站,我们要在sitemap文件中录入每一篇帖子,并且有新帖子发布的时候,要更新sitemap中帖子广场页面的url。
Sitemap文件列表:
sitemap文件名 作用
sitemap_index.xml sitemap索引文件,索引多个sitemap文件,向搜索引擎提交的就是这个文件
s_posts_(n).xml 帖子页面的sitemap文件,n表示版本号,下面将详细介绍这个版本号的作用
s_base.xml 基本页面的sitemap文件,如首页,登陆页,帖子广场页面等,此sitemap文件大多数时候是需要人为写入和修改的。
每个用途的sitemap文件大体内容结构:
  • sitemap_index.xml
<?xml version='1.0' encoding='utf-8'?>
<sitemapindex>
    <sitemap>
        <loc></loc>
        <lastmod></lastmod>
    </sitemap>
</sitemapindex>
  • s_posts.xml
<?xml version='1.0' encoding='utf-8'?>
<urlset>
    <url>
        <loc></loc>
        <changefreq></changefreq>
        <priority></priority>
        <lastmod></lastmod>
    </url>
</urlset>
  • s_base.xml
<?xml version='1.0' encoding='utf-8'?>
<urlset>
    <!-- 这里主要是放我们的帖子广场的url -->
    <url>
        <loc>http://www.xfc.com/posts</loc>
        <changefreq></changefreq>
        <priority></priority>
        <lastmod></lastmod>
    </url>
</urlset>
此方案更新sitemap文件的大体流程如下:
Created with Raphaël 2.1.0 调用更新所有sitemap的方法 更新帖子sitemap 连带更新帖子库的sitemap 最终更新sitemap索引文件中上面被更新的子sitemap文件的索引 写入所有更新的内容到对应的sitemap文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值