目录

Python 百度 SEO 工具脚本 | 百度普通收录 API 提交工具

目录

有兴趣的可以自行部署在服务器上,做成每日自动提交,或者 webhook 触发等。

百度提交页面:https://ziyuan.baidu.com/linksubmit/index

通过此页面可以向百度搜索主动推送资源,同时百度也提供了 API 提交接口,这样可以缩短爬虫发现网站链接的时间,但百度不保证收录和展现效果。

以本站为例,百度提供了 API 提交的样例参数。

/post_images/image-20210831123142418.png

源码

解析站点当前的 sitemap.xml 文件内容,向百度批量提交 url 。

使用前需要注意替换真实参数:

  • site
  • token
  • sitemap_path
# -*- coding: UTF-8 -*-

import requests
import json
import re


class Pusher:
    # 初始化参数
    def __init__(self, site, token, sitemap_path):
        self.site = site
        self.token = token
        self.sitemap_path = sitemap_path

    # 批量提交 url
    def post(self, urls):
        post_url = f"http://data.zz.baidu.com/urls?site={self.site}&token={self.token}"
        headers = {
            'User-Agent': 'curl/7.12.1',
            'Host': 'data.zz.baidu.com',
            'Content-Type': 'text/plain',
            'Content-Length': str(len(urls)),
        }
        response = requests.post(post_url, headers=headers, data=urls)

        if response.status_code != 200:
            print(f"推送失败(异常状态码):{response.status_code}")
            print()
            return None

        response = response.text
        response = json.loads(response)

        if "error" in response:
            print(f"推送失败(error)")
            print(response)
            print()
            return None

        if "success" not in response:
            print(f"推送异常(百度已更改返回体格式)")
            print(response)
            print()
            return None

        print(f"已成功推送 {response['success']} 条 url")
        print(f"当天剩余的可推送 url 条数 ---> {response['remain']}")
        print()

        return None

    # 获取站点 sitemap.xml 文件内容, 解析 url
    def get_url_from_sitemap(self):
        url = f"{self.site}{self.sitemap_path}"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        }
        response = requests.get(url, headers=headers)

        if response.status_code != 200:
            print(f"获取站点 xml 文件失败(异常状态码):{response.status_code}")
            print()
            exit(0)

        sitemap_xml = response.text

        urls = re.findall(r'<loc>(.+?)</loc>', sitemap_xml, re.S)

        if urls is None or urls == [] or urls == "":
            print(f"解析 url 失败(该站点不存在 sitemap.xml 或内容为空)")
            print()
            exit(0)

        print(f"获取站点 xml 文件成功, 共有:{len(urls)} 条 url")
        print(urls)
        print()

        return urls

    # 入口
    def main(self):
        urls = self.get_url_from_sitemap()

        body = ""

        for url in urls:
            body += f"{url}\n"

        self.post(body)


if __name__ == '__main__':
    # 站点
    site = "https://sugarless.top"
    # 百度提交页面提供的 token
    token = "JvNXvshHiebMYkve"
    # 站点 sitemap uri
    # sitemap_path = "/zh-cn/sitemap.xml"
    sitemap_path = "/sitemap.xml"

    pusher = Pusher(site, token, sitemap_path)
    pusher.main()

REF

https://blog.csdn.net/minge89/article/details/108031025