如何用Python抓取科技产品并将抓取数据存入数据库?
用Python抓取科技产品数据并存入数据库的完整流程
以下是从基础到落地的分步操作,都是入门级实现,适合新手理解:
一、网页数据抓取(静态页面)
用requests库获取网页源码,BeautifulSoup解析提取数据,这俩是最基础的组合,容易上手。
1. 先安装依赖
pip install requests beautifulsoup4
2. 抓取示例代码
假设你要抓取的是静态科技产品列表页,比如某网站的笔记本产品页面:
import requests from bs4 import BeautifulSoup import time def scrape_tech_products(url): # 设置请求头,模拟浏览器访问,避免被拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } try: # 发送请求获取网页内容 response = requests.get(url, headers=headers) response.raise_for_status() # 如果请求失败,抛出异常 soup = BeautifulSoup(response.text, "html.parser") # 提取产品数据(这里要根据目标网站的HTML结构调整选择器) products = [] product_items = soup.find_all("div", class_="product-item") # 假设产品项的class是product-item for item in product_items: product = {} # 提取产品名称 product["name"] = item.find("h3", class_="product-name").get_text(strip=True) # 提取价格 product["price"] = item.find("span", class_="product-price").get_text(strip=True) # 提取型号 product["model"] = item.find("p", class_="product-model").get_text(strip=True) products.append(product) return products except Exception as e: print(f"抓取出错: {e}") return [] # 调用函数(替换成你要抓取的目标URL) target_url = "https://example.com/tech-products" products_data = scrape_tech_products(target_url)
关键提示:
- 打开目标网站的开发者工具(F12),查看产品元素的HTML结构,调整
find/find_all的参数(比如class名称) - 不要频繁请求,每次请求后加
time.sleep(1),避免被网站封禁IP - 如果是动态加载的页面(比如滚动加载、JS渲染),可以用
selenium库,但先搞定静态页面的基础操作
二、搭建数据库(用SQLite,无需额外安装)
Python自带SQLite,不用装数据库服务,适合新手快速上手。
1. 创建数据库和表
import sqlite3 from datetime import datetime def init_database(): # 连接数据库(不存在则自动创建) conn = sqlite3.connect("tech_products.db") cursor = conn.cursor() # 创建产品表 create_table_sql = """ CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, price TEXT, model TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) """ cursor.execute(create_table_sql) conn.commit() conn.close() # 初始化数据库 init_database()
三、将抓取的数据存入数据库
把之前抓取到的products_data插入到SQLite数据库中:
def save_to_database(products): conn = sqlite3.connect("tech_products.db") cursor = conn.cursor() # 批量插入数据(参数化查询,防止SQL注入) insert_sql = """ INSERT INTO products (name, price, model) VALUES (?, ?, ?) """ # 构造插入参数 data = [(p["name"], p["price"], p["model"]) for p in products] cursor.executemany(insert_sql, data) conn.commit() print(f"成功存入 {cursor.rowcount} 条数据") conn.close() # 调用保存函数 if products_data: save_to_database(products_data)
四、验证数据是否存入
可以用SQLite浏览器打开tech_products.db查看,或者用代码查询:
def query_data(): conn = sqlite3.connect("tech_products.db") cursor = conn.cursor() cursor.execute("SELECT * FROM products LIMIT 5") rows = cursor.fetchall() for row in rows: print(row) conn.close() # 查询验证 query_data()
额外注意事项:
- 遵守目标网站的
robots.txt规则,不要抓取禁止爬取的内容 - 如果需要大规模抓取,可以考虑用
scrapy框架,但先从基础组合入手 - 数据清洗:抓取到的价格可能带符号(比如¥),可以提前处理成数字类型,方便后续分析
内容的提问来源于stack exchange,提问作者Shush
相关产品推荐
相关产品推荐

