Python 爬虫入门:如何抓取电商网站商品数据
在数据分析、市场调研等场景中,我们常需要获取电商网站的商品数据。本文将以 Python 为工具,带你入门电商商品数据抓取,还会提供一个完整的爬虫示例,帮助你快速上手。
一、爬虫前的准备:了解规则与工具
首先要明确,抓取电商数据需遵守网站的 robots
协议( robots.txt 文件),不得过度请求影响网站正常运行,更不能用于非法用途。
1. 核心工具
- requests:发送 HTTP 请求,获取网页内容。
- BeautifulSoup:解析 HTML 页面,提取目标数据(如商品名称、价格、销量)。
- time:控制请求间隔,避免被网站识别为 “恶意爬虫”。
2. 安装工具
打开命令行,输入以下命令安装所需库:
pip install requests beautifulsoup4
二、完整爬虫示例:抓取某电商搜索页商品数据
以 “笔记本电脑” 搜索结果为例,我们抓取商品的名称、价格和销量(示例中网站为模拟场景,非真实某东 / 某宝 / 某多多,实际抓取需适配目标网站结构)。
代码实现
import requests
from bs4 import BeautifulSoup
import timedef crawl_ecommerce(keyword):# 1. 构造请求 URL(模拟搜索页 URL,实际需替换为目标网站真实 URL)url = f"https://example-ecommerce.com/search?q={keyword}"# 2. 设置请求头(模拟浏览器,避免被拦截)headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"}try:# 3. 发送请求,获取网页内容response = requests.get(url, headers=headers)response.raise_for_status() # 若请求失败(如 404、500),抛出异常response.encoding = response.apparent_encoding # 自动适配编码,避免乱码# 4. 解析 HTML,提取数据soup = BeautifulSoup(response.text, "html.parser")# 找到商品列表容器(需根据目标网站 HTML 结构调整标签和类名)product_list = soup.find_all("div", class_="product-item")if not product_list:print("未找到商品数据,可能页面结构已变化或被拦截。")return# 5. 遍历商品,提取并打印信息print(f"=== {keyword} 搜索结果(共 {len(product_list)} 件商品)===")for idx, product in enumerate(product_list, 1):# 商品名称(调整标签和类名匹配目标网站)name = product.find("h3", class_="product-name").get_text(strip=True)# 商品价格price = product.find("span", class_="product-price").get_text(strip=True)# 商品销量(部分网站销量标签可能不同,需灵活调整)sales = product.find("span", class_="product-sales")sales_text = sales.get_text(strip=True) if sales else "暂无销量"print(f"{idx}. 名称:{name}\n 价格:{price}\n 销量:{sales_text}\n")time.sleep(1) # 间隔 1 秒,降低请求频率except requests.exceptions.RequestException as e:print(f"请求出错:{e}")# 调用函数,抓取“笔记本电脑”数据
if __name__ == "__main__":crawl_ecommerce("笔记本电脑")
代码说明
- 请求头设置:
User-Agent
模拟浏览器访问,避免网站直接拒绝爬虫请求。 - 异常处理:
try-except
捕获请求失败(如网络错误、页面不存在),提高代码稳定性。 - 数据解析:
BeautifulSoup
的find
/find_all
方法根据 HTML 标签和类名提取数据,实际使用时需打开目标网站 “开发者工具”(F12)查看真实结构。 - 请求间隔:
time.sleep(1)
控制每次请求间隔,避免短时间内大量请求被网站封禁 IP。
三、注意事项
- 尊重网站规则:抓取前查看目标网站的
robots.txt
(如https://www.xxx.com/robots.txt
),不抓取禁止访问的页面。 - 避免高频请求:除了
time.sleep
,还可使用代理 IP 轮换(如requests.get(url, proxies={"http": "http://ip:port"})
),降低 IP 被封风险。 - 动态页面处理:某东、某宝、某多多等平台多为动态加载页面(数据通过 JavaScript 渲染),直接用
requests
无法获取完整数据,需使用Selenium
或Playwright
模拟浏览器加载,或分析 API 接口(难度较高,且需注意接口加密)。 - 合法使用数据:抓取的商品数据仅可用于个人学习、研究,不得用于商业用途或侵犯他人权益。
通过以上步骤,你已掌握 Python 爬虫抓取电商数据的基础逻辑。实际操作中,需根据不同网站的结构灵活调整代码,同时始终遵守网络规则和法律法规。