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

Python自动生成Sitemap并存储到数据库的实现方式

发布时间:2023-12-11 14:03:48

要自动生成Sitemap并将其存储到数据库中,可以使用Python中的第三方库进行实现。下面是一种实现方式的例子:

首先,我们需要使用Python的requests库来获取网站的页面信息。然后,使用BeautifulSoup库来解析页面内容。

import requests
from bs4 import BeautifulSoup

def get_links(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    links = []
    for link in soup.find_all('a'):
        href = link.get('href')
        if href.startswith('http'):
            links.append(href)
    
    return links

url = 'https://example.com'
links = get_links(url)
print(links)

上述代码使用requests.get()方法获取给定URL的页面内容,并使用html.parser解析器解析页面内容。然后,使用find_all()方法和'a'参数获取页面中的所有链接,并将链接添加到links列表中。

接下来,我们需要将生成的Sitemap存储到数据库中。可以使用Python的内置库sqlite3来连接和操作SQLite数据库。

import sqlite3

def create_db():
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()
    
    c.execute('''CREATE TABLE IF NOT EXISTS sitemap
                 (url text PRIMARY KEY)''')
    
    conn.commit()
    conn.close()

def insert_into_db(url):
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()

    c.execute('INSERT INTO sitemap VALUES (?)', (url,))
    
    conn.commit()
    conn.close()

def get_from_db():
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()
    
    c.execute('SELECT * FROM sitemap')
    rows = c.fetchall()
    
    conn.close()
    
    return rows

create_db()
for link in links:
    insert_into_db(link)
    
print(get_from_db())

上述代码中,create_db()函数创建了一个名为sitemap.db的SQLite数据库,并创建了一个名为sitemap的表来存储URL。insert_into_db()函数用于将URL插入到数据库中。get_from_db()函数用于从数据库中获取存储的URL。

最后,我们可以将以上代码整合在一起,并通过一个循环来生成整个网站的Sitemap并存储到数据库中。

import requests
from bs4 import BeautifulSoup
import sqlite3

def get_links(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    links = []
    for link in soup.find_all('a'):
        href = link.get('href')
        if href.startswith('http'):
            links.append(href)
    
    return links

def create_db():
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()
    
    c.execute('''CREATE TABLE IF NOT EXISTS sitemap
                 (url text PRIMARY KEY)''')
    
    conn.commit()
    conn.close()

def insert_into_db(url):
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()

    c.execute('INSERT INTO sitemap VALUES (?)', (url,))
    
    conn.commit()
    conn.close()

def get_from_db():
    conn = sqlite3.connect('sitemap.db')
    c = conn.cursor()
    
    c.execute('SELECT * FROM sitemap')
    rows = c.fetchall()
    
    conn.close()
    
    return rows

def generate_sitemap(url):
    links = get_links(url)
    for link in links:
        insert_into_db(link)
        
    print(get_from_db())

create_db()
generate_sitemap('https://example.com')

以上代码通过调用get_links()函数获得页面中的链接,并将链接插入到数据库中。最后,调用generate_sitemap()函数来生成整个网站的Sitemap并存储到数据库中。

注意:以上代码例子仅仅是一个简单的示例,实际应用中可能还需要处理异常、过滤重复链接等等。另外,可以根据需求自定义数据库结构以满足具体的需求。