网站地图自动推送至百度搜索

网站搭建好后,需要将网站的所有网址推送给搜索引擎。而且百度搜索引擎不会自动更新内容,有新的内容需要手动更新网址。

当然,百度也提供了自动机制,那需要提交手持身份证照片。

PHP版

百度提供了一个PHP版的模板

1
2
3
4
5
6
7
8
9
10
11
12
$api = 'http://data.zz.baidu.com/urls?site=https://feater.top&token=yourtoken';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", yoururls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
echo $result;

首先要获取地图的所有内容

1
2
3
$html=file_get_contents('https://feater.top/post-sitemap.xml');
//从网页源码中过滤网址
preg_match_all('/<loc>(.+?)<\/loc>/',$html,$match);

直接用PHP获取地图的所有内容,然后从里面过滤出网址。

完整PHP代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$html=file_get_contents('https://feater.top/post-sitemap.xml');
//从网页源码中过滤网址
preg_match_all('/<loc>(.+?)<\/loc>/',$html,$match);
#echo $html;
#echo gettype($match[0]);
#echo $match[0][0];
#foreach($match[0] as $url){
# echo $url;
# echo "<br />";
#}

##########以下内容由百度提供##############
//网址提交口令
$api = 'http://data.zz.baidu.com/urls?site=https://feater.top&token=yourtoken';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $match[0]),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
echo $result;
?>

将内容保存到网站目录下,直接访问这个PHP文件,就会自动提交。

前提是必须要有PHP+curl运行环境。

Python版

原来网站是用Linux+Apache+PHP+WordPress搭建的,现在换成了Hexo,没有PHP环境了,内存占用小很多。

所以有了Python版推送

先获取网页内容,过滤网址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# !/bin/env python3 

import requests
import re
import io

r=requests.get('https://feater.top/sitemap.xml')
#print(r.text)

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

f = open("urls.txt","w")

for url in urls:
f.write(url+'\n')

f.close()

print("Get all urls done.")

获取的所有的网址一行一条保存在urls.txt

这里用脚本推送

1
2
3
4
5
6
# !/bin/sh

python3 geturls.py
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=https://feater.top&token=yourtoken"

echo '\n'

先调用Python脚本获取网址并保存到本地文件,然后用shell读取文件并推送。