在设计Python爬虫的数据库表结构时,需要考虑爬取的数据类型、数据量大小以及查询效率等因素。以下是一个基本的表结构设计示例,假设我们要爬取的是网页内容、网页标题和网页链接。
常用的数据库有MySQL、PostgreSQL、SQLite等。这里以MySQL为例进行说明。
web_pages
表存储网页的基本信息。
CREATE TABLE web_pages (
id INT AUTO_INCREMENT PRIMARY KEY,
url VARCHAR(255) NOT NULL UNIQUE,
title VARCHAR(255),
content TEXT,
crawl_date DATETIME DEFAULT CURRENT_TIMESTAMP
);
id
: 主键,自增。url
: 网页的URL,唯一。title
: 网页的标题。content
: 网页的内容。crawl_date
: 爬取日期,默认为当前时间。links
表存储网页中的链接信息。
CREATE TABLE links (
id INT AUTO_INCREMENT PRIMARY KEY,
page_id INT NOT NULL,
url VARCHAR(255) NOT NULL UNIQUE,
title VARCHAR(255),
FOREIGN KEY (page_id) REFERENCES web_pages(id)
);
id
: 主键,自增。page_id
: 所属网页的ID,外键关联到web_pages
表的id
。url
: 链接的URL,唯一。title
: 链接的标题。INSERT INTO web_pages (url, title, content) VALUES
('https://example.com/page1', 'Page 1', '<html>...</html>'),
('https://example.com/page2', 'Page 2', '<html>...</html>');
INSERT INTO links (page_id, url, title) VALUES
(1, 'https://example.com/page1/link1', 'Link 1'),
(1, 'https://example.com/page1/link2', 'Link 2'),
(2, 'https://example.com/page2/link1', 'Link 1');
SELECT
wp.id AS page_id,
wp.url AS page_url,
wp.title AS page_title,
wp.content AS page_content,
l.id AS link_id,
l.url AS link_url,
l.title AS link_title
FROM
web_pages wp
LEFT JOIN
links l ON wp.id = l.page_id
WHERE
wp.url = 'https://example.com/page1';
SELECT
wp.id AS page_id,
wp.url AS page_url,
wp.title AS page_title
FROM
web_pages wp
JOIN
links l ON wp.id = l.page_id
WHERE
l.url = 'https://example.com/page1/link1';
根据具体的爬虫需求,可以扩展和修改表结构,例如添加更多的字段、创建更多的关联表等。设计表结构时,需要考虑数据的完整性、查询效率和扩展性。