在数据分析、市场调研等场景中,我们常需要获取电商网站的商品数据。本文将以 Python 为工具,带你入门电商商品数据抓取,还会提供一个完整的爬虫示例,帮助你快速上手。
一、爬虫前的准备:了解规则与工具
首先要明确,抓取电商数据需遵守网站的 robots
协议( robots.txt 文件),不得过度请求影响网站正常运行,更不能用于非法用途。
1. 核心工具
- requests:发送 HTTP 请求,获取网页内容。
- BeautifulSoup:解析 HTML 页面,提取目标数据(如商品名称、价格、销量)。
- time:控制请求间隔,避免被网站识别为 “恶意爬虫”。
2. 安装工具
打开命令行,输入以下命令安装所需库:
pip install requests beautifulsoup4
二、完整爬虫示例:抓取某电商搜索页商品数据
以 “笔记本电脑” 搜索结果为例,我们抓取商品的名称、价格和销量(示例中网站为模拟场景,非真实某东 / 某宝 / 某多多,实际抓取需适配目标网站结构)。
代码实现
import requests
from bs4 import BeautifulSoup
import time
def 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 爬虫抓取电商数据的基础逻辑。实际操作中,需根据不同网站的结构灵活调整代码,同时始终遵守网络规则和法律法规。