Python实现博客站点url实时推送至百度与Linux定时任务
条评论之前写过一篇关于【Hexo】maupassant 主题设置百度站点自动推送 的博客
这种自动推送的方式也只有在页面受访时才会被提交至百度,只可惜百度对个人博客url的收录速度确实无法跟Google比呀,因此编写Python脚本通过站点的 sitemap.xml 与Linux定时任务实现 主动推送 的自动化。具体步骤如下:
链接提交方式的对比
可转至 https://ziyuan.baidu.com/college/courseinfo?id=267&page=2#h2_article_title9 ,百度搜索资源平台查看链接提交方式的效果差异:
- 主动推送:最为 快速 的提交方式,建议您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
- sitemap: 您可以定期将网站链接放到Sitemap中,然后将Sitemap提交给百度。百度会周期性的抓取检查您提交的Sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
- 手工提交:如果您不想通过程序提交,那么可以采用此种方式,手动将链接提交给百度。
- 自动推送:是轻量级链接提交组件,将自动推送的JS代码放置在站点每一个页面源代码中,当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。
对于以上的sitemap与自动推送方式,此前博主已设置过该方式,但链接提交速度还是不如主动推送。
个人博客生成sitemap站点地图
首先,引用百度关于主动推动的相关格式:
推送接口
接口调用地址:http://data.zz.baidu.com/urls?site=个人博客地址&token=每个站长有唯一的标识
参数名称 是否必选 参数类型 说明 site 是 string 在搜索资源平台验证的站点,比如www.example.com token 是 string 在搜索资源平台申请的推送用的准入密钥 推送示例
curl推送示例
将要提交的链接按照每行一条的格式写入一个文本文件中,命名此文件为urls.txt,然后进入该文件所在目录,执行如下命令:
curl -H ‘Content-Type:text/plain’ –data-binary @urls.txt “http://data.zz.baidu.com/urls?site=个人博客地址&token=每个站长有唯一的标识"
这里要求编写一个 urls.txt 文件存放我们想要提交的url。自己手动输入url是件很麻烦的事,因此想到不如从sitemap中提取所有站点url。
来访搭建了个人博客的博主应该都知道怎么生成sitemap,这里还是简要说明一下,以 Hexo 博客框架举例,在博客根目录执行以下代码安装sitemap生成插件:
1 | sudo npm install hexo-generator-sitemap --save |
之后编辑Hexo博客根目录下的 _config.yml 文件,添加如下配置:
1 | sitemap: |
安装sitemap生成插件,部署站点后,通过 https://你的博客url/sitemap.xml 即可访问到 sitemap.xml。
通过Python提取urls并写入文件
现在已生成了sitemap,要做的就是将其中所有的url解析出来写入到某个urls.txt文件中。之后再按照百度的要求执行curl命令即可。
使用到的第三方Python库:Requests
在Linux环境下(CentOS)需要执行以下代码安装:
1 | sudo yum install python3 # 如果没有python则需要先安装 |
- 代码相关说明: 务必在执行前,修改以下代码中的
blog_url
和token
两个变量,其中token
需要先到百度站长中心添加自己的网站才能获取。 - 代码基本思路:
- 通过 requests 库将个人站点sitemap中的urls解析出来并到用户目录下的 urls.txt 文件中
- 通过 os 库执行命令,将命令执行后的输出按行写入到用户目录下的 submit_log.txt 文件中,以保存作为链接的提交日志。同时记录提交的次数和时间。
1 | import os |
通过Linux服务器执行定时任务
既然有个人站点,必定是已购买了个人服务器的,所以应充分发挥服务器的作用,哈哈。
仅以CentOS举例:
- 将在本地写好的python代码(此处文件名为 activepush.py )复制到服务器的用户目录之下:(也可在服务器中直接编辑创建)
1 | scp activepush.py 服务器名:~/ |
- 假设是以 root 用户登录的,现在cd至
/etc/cron.daily
目录下,实际上通过tab补全可以看到有多个cron的目录。
1 | cd /etc/cron. |
这里不同目录下分别存放的是每天、每周、每小时等等执行的脚本文件。因此进入/etc/cron.hourly
目录后,通过vim在其中创建shell脚本文件: vim activepush
,在该文件中输入以下命令,之后 :qw
退出并保存。
1 | python3 存放python代码的目录/activepush.py |
- 最后要让创建的shell脚本可执行,通过chmod修改权限(为了方便设为对所有用户都可执行)
1 | sudo chmod a+x activepush |
OK,最后昨天凌晨挂上去的,现在查看一下日志文件
1 | [root@server-char]~# cat urls.txt |
每小时提交一次,一共提交10次了,这里remain是百度说每日剩余可提交的url数量,但是似乎是每天10万条,怎么提交也不会超过。
现在我的站点将主动推送也自动化了,集结了主动推送、自动推送以及sitemap自动抓取,这回还不努力收录我的urls,我真要对百度失望了。
最后,似乎完成对全站的https认证才能提高链接的收录几率。
- 本文链接:https://blog.charjin.top/2020/02/26/hexo-baidu-activepush/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
分享