背景

之前我发表过一遍<Python 5行代码实现主动推送链接给百度--实现快速收录>,如果你的博客/网站管理系统支持发布回调的话是很方便使用的,但有很多站点使用的cms或博客管理系统无法实现调用的话,那就使用今天何三给大家分享的根据sitemap一键推送给百度收录的python小脚本吧

思路

  1. 获取站点的sitemap.xml
  2. 解析sitemap中的url链接地址
  3. 组合成数据并推送给百度

实施

1、获取站点的sitemap.xml

我们通过requests库获取

import requests
sitemap_url = 'https://www.h3blog.com/sitemap.xml'      #sitemap.xml的链接地址
ret = requests.get(sitemap_url,timeout=3).text
print(ret) #    输出sitemap.xml内容

2、解析sitemap.xml中url链接地址

由于sitemap.xml是xml格式,那么我可以使用python中xml模块,也可以使用正则表达式,由于sitemap.xml比较简单用正则表达式比较方便

import re
re_loc = re.compile('<loc>(.*?)</loc>')
urls = re.findall(re_loc,ret)
print(urls)     #输出解析出来的链接列表

3、组合成接口数据并推送给百度

百度资源平台接口如果有多个链接地址是需要用\n分割开的

urls_str = '\n'.join(urls)  #组合数据,使用\n进行分割组合
result = baidu_push_urls('https://www.h3blog.com',urls_str) #调用百度接口
print(result)

完整代码:

import requests
import re

baidu_token = '你的token' #百度资源平台token

#推送百度接口函数
def baidu_push_urls(domain,urls):
    headers = {'Content-Type':'text/plain'}
    url = 'http://data.zz.baidu.com/urls?site={}&token={}'.format(domain,baidu_token)
    ret = requests.post(url,headers=headers, data = urls, timeout=3).text
    return ret


def push_sitemap(domain,sitemap_url):
    #获取sitemap.xml内容
    ret = requests.get(sitemap_url,timeout=3).text

    #解析sitemap.xml中的链接地址
    re_loc = re.compile('<loc>(.*?)</loc>')
    urls = re.findall(re_loc,ret)

    #组合数据并调用百度推送接口
    urls_str = '\n'.join(urls)
    result = baidu_push_urls(domain,urls_str)

    print(result) #打印结果

if __name__ == '__main__':
    domain = 'https://www.h3blog.com'   #修改成你自己的域名
    sitemap_url = 'https://www.h3blog.com/sitemap.xml'      #修改成你网站的sitemap.xml地址
    push_sitemap(domain,sitemap_url)

将上述代码保存成push_sitemap.py 并将参数修改成你自己即可运行

{"remain":99937,"success":34} 

返回参数详解请查看 百度资源平台接口说明