欢迎访问宙启技术站
智能推送

使用Python编写自动更新Sitemap并通知服务器的脚本

发布时间:2023-12-11 14:06:18

自动更新Sitemap是网站管理的重要任务之一,它可以帮助搜索引擎更好地索引你的网站内容。下面是一个使用Python编写的自动更新Sitemap并通知服务器的脚本示例。

import os
import requests
from bs4 import BeautifulSoup

# 定义网站根目录和sitemap文件名
base_url = 'https://www.example.com'
sitemap_file = 'sitemap.xml'

def update_sitemap():
    # 获取网站所有页面的URL
    pages = get_pages()

    # 生成sitemap内容
    sitemap_content = generate_sitemap(pages)

    # 将sitemap内容写入文件
    write_to_file(sitemap_content)

    # 通知搜索引擎更新sitemap
    notify_search_engines()

def get_pages():
    # 发送GET请求获取网站首页
    response = requests.get(base_url)
    if response.status_code == 200:
        # 使用BeautifulSoup解析网页内容
        soup = BeautifulSoup(response.text, 'html.parser')
        # 获取网页中的所有<a>标签
        links = soup.find_all('a')
        # 获取链接的href属性并过滤掉无效链接
        urls = [link.get('href') for link in links if link.get('href') and link.get('href').startswith(base_url)]
        return urls
    return []

def generate_sitemap(pages):
    # 生成sitemap的XML内容
    sitemap_content = '<?xml version="1.0" encoding="UTF-8"?>
'
    sitemap_content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
'
    for page in pages:
        sitemap_content += f'<url><loc>{page}</loc></url>
'
    sitemap_content += '</urlset>'
    return sitemap_content

def write_to_file(sitemap_content):
    # 将sitemap内容写入sitemap文件
    with open(sitemap_file, 'w') as f:
        f.write(sitemap_content)

def notify_search_engines():
    # 通过HTTP请求通知搜索引擎更新sitemap
    search_engines = ['http://www.google.com/ping?sitemap=', 'http://www.bing.com/ping?sitemap=']
    for search_engine in search_engines:
        ping_url = search_engine + base_url + '/' + sitemap_file
        response = requests.get(ping_url)
        if response.status_code != 200:
            print(f'Failed to notify search engine: {search_engine}')

# 执行自动更新sitemap脚本
update_sitemap()

在上面的示例中,我们首先定义了网站的根目录和sitemap文件名。然后,使用get_pages()函数获取网站所有页面的URL。函数首先发送GET请求获取网站首页的内容,然后使用BeautifulSoup解析网页内容,从中提取有效的页面URL。

接下来,使用generate_sitemap()函数生成sitemap的XML内容。函数遍历所有页面URL,并将其包装在<url><loc></loc></url>标签中。

然后,使用write_to_file()函数将sitemap内容写入sitemap文件。

最后,使用notify_search_engines()函数通过HTTP请求通知搜索引擎更新sitemap。我们定义了需要通知的搜索引擎URL,然后使用requests.get()发送GET请求,将sitemap文件的URL作为参数传递给搜索引擎。如果HTTP响应的状态码不为200,则表示通知搜索引擎失败。

你可以将上面的代码保存为一个Python脚本文件,然后在需要自动更新Sitemap的时候运行它。