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