使用Python推送链接到百度站长

辣鸡百度!!!

背景

自己创建的网站,需要被搜索引擎收录才能使得自己的文章可以被搜索到(即被搜索引擎爬虫抓取),但是百度的sitemap收录实在是过于智障,因此换成API推送

收录方式比较

API推送:最为快速的提交方式,建议您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。

sitemap:您可以定期将网站链接放到Sitemap中,然后将Sitemap提交给百度。百度会周期性的抓取检查您提交的Sitemap,对其中的链接进行处理,但收录速度慢于API推送。

手动提交:如果您不想通过程序提交,那么可以采用此种方式,手动将链接提交给百度。

自动推送:轻量级链接提交组件,将自动推送的JS代码放置在站点每一个页面源代码中,当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。

综上,选择使用Python编写自动提交的脚本来实现手动API推送。

开始

分析sitemap.xml

让我们打开我们站点的sitemap.xml文件,观察

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>
<loc>http://garfielder.com/post/990cc2cb.html</loc>
<lastmod>2021-07-20</lastmod>
</url>

<url>
<loc>http://garfielder.com/post/bad46b98.html</loc>
<lastmod>2021-07-20</lastmod>
</url>

<url>
<loc>http://garfielder.com/post/8dc94313.html</loc>
<lastmod>2021-07-19</lastmod>
</url>
</urlset>

发现,我们文章的链接都被包裹在了<url>标签中的<loc>标签内,因此只要获取到这些链接然后推送即可,这里就需要用到Python的xml模块和requests模块。

Python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
import xml.dom.minidom

sitemap = 'sitemap.xml'
site = 'yoursite'
api = 'http://data.zz.baidu.com/urls?site=yoursite&token=xxxxxxxxxxx'
res = []

dom = xml.dom.minidom.parse(sitemap)
root = dom.documentElement
urls = root.getElementsByTagName("url")
for url in urls:
loc = url.getElementsByTagName("loc")
if loc[0].childNodes[0].data.split(site)[1].split("/")[1] == "post":
res.append("//www.".join(loc[0].childNodes[0].data.split("//")))
response = requests.post(api, data="\n".join(res))
print(response.content.decode())

其中,site换成你自己的网站,api可以在百度站长处查看,sitemap.xml必须是本地文件

api

运行代码,看到成功的状态即表示提交成功

1
2
3
4
{
remain: 2870,
success: 61
}