「编程类软件工具合集」
链接:https://pan.quark.cn/s/0b6102d9a66a
当你在咖啡馆点单时,服务员不会用集装箱给你送咖啡——同理,处理中小规模爬虫数据时,SQLite这个"轻量级数据库"就是最合适的工具。它不需要单独的服务器进程,所有数据存储在单个文件中,却能提供完整的SQL功能支持。

对比其他方案:
SQLite的优势在于:
确保已安装Python 3.6+版本,通过命令行验证:
python --version
使用pip安装爬虫和数据库相关库:
pip install requests beautifulsoup4 sqlite3 fake_useragent
requests:HTTP请求库beautifulsoup4:HTML解析库sqlite3:Python内置库,无需单独安装fake_useragent:生成随机User-Agent推荐使用VS Code或PyCharm,安装SQLite插件(如SQLite Explorer)方便可视化查看数据。
打开豆瓣电影Top250页面
https://movie.douban.com/top250?start=0(0,25,50...)import requests
from bs4 import BeautifulSoup
import sqlite3
from fake_useragent import UserAgent
def fetch_movie_page(url):
headers = {'User-Agent': UserAgent().random}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
def parse_movie_info(html):
soup = BeautifulSoup(html, 'html.parser')
movies = []
for item in soup.find_all('div', class_='item'):
title = item.find('span', class_='title').text
rating = item.find('span', class_='rating_num').text
voters = item.find('div', class_='star').find_all('span')[-1].text[:-3]
quote = item.find('span', class_='inq')
quote = quote.text if quote else "无"
movies.append((title, rating, voters, quote))
return movies
def save_to_sqlite(movies):
conn = sqlite3.connect('douban_top250.db')
cursor = conn.cursor()
# 创建表(如果不存在)
cursor.execute('''
CREATE TABLE IF NOT EXISTS movies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
rating REAL,
voters INTEGER,
quote TEXT
)
''')
# 插入数据
cursor.executemany('''
INSERT INTO movies (title, rating, voters, quote)
VALUES (?, ?, ?, ?)
''', movies)
conn.commit()
conn.close()
print("数据保存成功!")
def main():
base_url = "https://movie.douban.com/top250?start="
all_movies = []
for i in range(0, 250, 25):
url = base_url + str(i)
print(f"正在抓取第{i//25+1}页...")
html = fetch_movie_page(url)
if html:
movies = parse_movie_info(html)
all_movies.extend(movies)
save_to_sqlite(all_movies)
if __name__ == "__main__":
main()
fake_useragent生成随机User-Agentdef query_top_rated():
conn = sqlite3.connect('douban_top250.db')
cursor = conn.cursor()
# 查询评分前10的电影
cursor.execute('''
SELECT title, rating, voters
FROM movies
ORDER BY rating DESC
LIMIT 10
''')
for row in cursor.fetchall():
print(f"{row[0]:<30} 评分:{row[1]:<5} 评价人数:{row[2]:>8}")
conn.close()
query_top_rated()
executemany()替代循环插入
将SQLite数据导出为CSV:
import pandas as pd
def export_to_csv():
conn = sqlite3.connect('douban_top250.db')
df = pd.read_sql_query("SELECT * FROM movies", conn)
df.to_csv('douban_movies.csv', index=False, encoding='utf_8_sig')
conn.close()
print("导出成功!")
export_to_csv()
Q1:被网站封IP怎么办? A:立即启用备用代理池,建议使用住宅代理(如站大爷IP代理),配合每请求更换IP策略。更稳妥的方式是:
Q2:如何处理反爬机制? A:常见反爬对策:
Q3:SQLite适合大规模数据吗? A:SQLite官方建议单数据库不超过140TB,但实际建议:
Q4:如何保证数据完整性? A:使用事务机制:
try:
conn.execute("BEGIN TRANSACTION")
# 执行多个SQL操作
conn.commit()
except:
conn.rollback()
Q5:SQLite支持并发写入吗? A:支持多进程读取,但写入是串行的。高并发场景建议:

通过这个实战项目,我们掌握了:
SQLite作为轻量级数据库,特别适合:
进阶方向建议:
记住:爬虫开发要遵守robots.txt协议,合理设置抓取频率,尊重网站的数据产权。技术本身无善恶,关键在于如何使用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。