用宝塔面板创建bing搜索的indexnow
本帖最后由 68087908 于 2026-1-22 15:21 编辑一、安装Python项目依赖“requests”,命令如下:pip3 install requests演示如下:
二、创建Python文件到目录“/www/wwwroot/IndexNow”,并取名为“IndexNow.py”,文件内容如下
文件中21、23、24行,改为自己的,
import requests
import xml.etree.ElementTree as ET
from datetime import datetime
import time
import logging
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('indexnow.log'),
logging.StreamHandler()
]
)
# 配置参数
SITEMAP_URL = "你自己的SiteMap文件.xml(不带序号的那个索引文件)"
INDEXNOW_API = "https://api.indexnow.org/indexnow"
HOST = "你自己的网站域名"
KEY = "你自己的IndexNow API Key"
KEY_LOCATION = f"https://{HOST}/{KEY}.txt"
def create_session_with_retries():
"""创建带重试机制的session"""
session = requests.Session()
# 配置重试策略
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=,
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
return session
def fetch_and_submit_sitemap_urls(sitemap_url, is_root=True):
"""读取并提交单个sitemap文件中的URL"""
try:
logging.info(f"正在处理网站地图: {sitemap_url}")
# 创建带重试机制的session
session = create_session_with_retries()
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
}
response = session.get(sitemap_url, headers=headers, timeout=30)
response.raise_for_status()
root = ET.fromstring(response.content)
namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
# 如果是sitemap索引文件
sitemaps = root.findall('ns:sitemap', namespace)
if sitemaps and is_root:
logging.info(f"发现 {len(sitemaps)} 个子sitemap文件")
for sitemap_elem in sitemaps:
loc = sitemap_elem.find('ns:loc', namespace)
if loc is not None:
# 递归处理每个子sitemap,立即提交
fetch_and_submit_sitemap_urls(loc.text, is_root=False)
# 添加延迟避免请求过于频繁
time.sleep(2)
else:
# 处理普通sitemap文件中的URL
urls = []
for url_elem in root.findall('ns:url', namespace):
loc = url_elem.find('ns:loc', namespace)
if loc is not None:
urls.append(loc.text)
if urls:
logging.info(f"从 {sitemap_url} 获取到 {len(urls)} 个URL")
# 立即提交这些URL
submit_to_indexnow(urls)
else:
logging.warning(f"从 {sitemap_url} 未获取到任何URL")
except Exception as e:
logging.error(f"处理网站地图 {sitemap_url} 失败: {e}")
def submit_to_indexnow(url_list, batch_size=100):
"""分批提交URL到IndexNow"""
headers = {
'Content-Type': 'application/json; charset=utf-8'
}
total_submitted = 0
for i in range(0, len(url_list), batch_size):
batch = url_list
payload = {
"host": HOST,
"key": KEY,
"keyLocation": KEY_LOCATION,
"urlList": batch
}
try:
# 创建带重试机制的session
session = create_session_with_retries()
response = session.post(INDEXNOW_API, json=payload, headers=headers, timeout=30)
if response.status_code == 200:
logging.info(f"成功提交 {len(batch)} 个URL")
total_submitted += len(batch)
else:
logging.warning(f"提交失败,状态码: {response.status_code}, 响应: {response.text}")
except Exception as e:
logging.error(f"提交过程中发生错误: {e}")
# 添加延迟避免请求过于频繁
time.sleep(1)
logging.info(f"从当前sitemap总共提交 {total_submitted} 个URL")
def main():
logging.info("开始执行IndexNow提交任务")
start_time = datetime.now()
try:
fetch_and_submit_sitemap_urls(SITEMAP_URL)
end_time = datetime.now()
duration = end_time - start_time
logging.info(f"IndexNow提交任务完成,总耗时: {duration}")
except Exception as e:
logging.error(f"任务执行失败: {e}")
if __name__ == "__main__":
main()
三、计划任务~添加任务,设置好自己想要重复执行的时间。脚本内容如下:
python3 /www/wwwroot/IndexNow/IndexNow.py
四、保存设置,执行查看日志
最下面的两张图片传错了,不知怎的,删不掉了,官方审核可以帮我删掉,如果图片可以删掉,这句话也一起删掉
页:
[1]