Python脚本实现的百度熊掌号链接提交

我们为了提高网站的收录量,最好通过API主动提交给搜索引擎,之前在 Hexo 中有比较好用的 hexo-baidu-url-submit 插件,而使用 hugo 后没找到比较合适方便的,于是便想到使用 python 提交到百度服务器,根据官方文档和示例,使用 http.client 实现的 POST 提交。

http.client 模块定义实现了 HTTP 和 HTTPS 协议的客户端类,API 如下:

class http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None, blocksize=8192)

HTTPConnection 的实例代表与 HTTP 的一个连接事务。 它的实例化应当传入一个主机和可选的端口号。 如果没有传入端口号,如果主机字符串的形式为 主机:端口 则会从中提取端口,否则将使用默认的 HTTP 端口(80)。 如果给出了可选的 timeout 参数,则阻塞操作(例如连接尝试)将在指定的秒数之后超时(如果未给出,则使用全局默认超时设置)。 可选的 source_address 参数可以为一个 (主机, 端口) 元组,用作进行 HTTP 连接的源地址。 可选的 blocksize 参数可以字节为单位设置缓冲区的大小,用来发送文件类消息体。

举个例子,以下调用都是创建连接到同一主机和端口的服务器的实例:

>>> h1 = http.client.HTTPConnection('www.python.org')
>>> h2 = http.client.HTTPConnection('www.python.org:80')
>>> h3 = http.client.HTTPConnection('www.python.org', 80)
>>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)

此模块中定义的常量为:

http.client.HTTP_PORT HTTP 协议默认的端口号 (总是 80)。

http.client.HTTPS_PORT HTTPS 协议默认的端口号 (总是 443)。

关于该模块的更多内容可以参考官方文档,接下来我们直接上实现代码 windows-baidu-submit.py

# -*- coding: utf-8 -*-
#!/usr/bin/python

import http.client

#百度站长平台连接提交
def tuisong():
    #urls.txt为需要推送的URL文件,每行一个
    filecontents = open( "urls.txt", "r" ).read()                 
    #创建请求路径
    url = "/urls?site=https://dp2px.com&token=xxxxxxx"
    #获得HTTPConnection实例
    conn = http.client.HTTPConnection('data.zz.baidu.com')
    #POST请求,将数据设置为body
    conn.request(method="POST", url=url, body=filecontents)
    #接收服务器响应
    response = conn.getresponse()
    #读取返回结果
    baiduresult = response.read()
    #关闭连接
    conn.close()
    #返回结果
    return baiduresult

#百度熊掌号连接提交
def xiongzhang():
    filecontents = open( "urls.txt", "r" ).read()   
    url = "/urls?appid=xxxxxx&token=xxxxxxx&type=realtime"
    conn = http.client.HTTPConnection('data.zz.baidu.com')
    conn.request(method="POST", url=url, body=filecontents)
    response = conn.getresponse()
    baiduresult = response.read()
    conn.close()
    return baiduresult

if __name__=="__main__":

    ts = tuisong()
    print(ts)

    xz = xiongzhang()
    print(xz)

注意:将上面的 xxxx 的地方换成你自己对应的 appid 和 token.

然后创建一个 urls.txt 文件位于同级目录下:

https://dp2px.com/2019/09/02/android-media/
https://dp2px.com/2019/09/02/favicon-cache/

每行一条,放置需要提交到搜索引擎的 url, 最后执行 python 命令:

python windows-baidu-submit.py

另外我在这里提一下,Python 文档上不建议直接使用 http.client.HTTPConnection 进行网络请求,而是使用 Request 模块来实现。 Request 是一个简单而优雅的 Python HTTP 请求库。

Request 模块文档地址:https://2.python-requests.org/en/master/

首先安装

pip3 install requests

基本使用

>>> r = requests.get('https://data.zz.baidu.com')
相当于requests.request(method='get', 'https://data.zz.baidu.com')
>>> r = requests.post('https://data.zz.baidu.com', data = {'key':'value'})
相当于requests.request(method='post', 'https://data.zz.baidu.com', data = {'key':'value'})

使用 Request 实现百度链接提交代码:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import requests

def tuisong():
    #urls.txt为需要推送的URL文件,每行一个   
    filecontents = {'file': open('urls.txt', 'rb')}             
    url = "/urls?site=https://dp2px.com&token=xxxxx"
    requests.post('https://data.zz.baidu.com' + url, files = filecontents
    print(requests.text)

def xiongzhang():
    #urls.txt为需要推送的URL文件,每行一个   
    filecontents = {'file': open('urls.txt', 'rb')}   
    url = "/urls?appid=xxxxxx&token=xxxxxxx&type=realtime"
    requests.post('https://data.zz.baidu.com' + url, files = filecontents
    print(requests.text)

if __name__=="__main__":
    ts = tuisong()
    xz = xiongzhang()