这个示例将抓取一个假设的商品列表网站,提取商品名称和价格,并将数据保存到CSV文件中。
pip install requests beautifulsoup4 pandas
然后,使用以下代码:
python">import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random# 目标网址(假设为一个商品列表页面)
base_url = 'http://example.com/products?page={}'# 存储抓取的数据
data = []# 设置请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}# 处理分页
for page in range(1, 6): # 假设我们抓取前5页url = base_url.format(page)try:# 发送请求response = requests.get(url, headers=headers)response.raise_for_status() # 检查请求是否成功# 解析网页内容soup = BeautifulSoup(response.text, 'html.parser')# 提取商品信息products = soup.find_all('div', class_='product') # 假设商品信息在<div class='product'>中for product in products:name = product.find('h2', class_='product-name').text.strip() # 假设商品名称在<h2 class='product-name'>中price = product.find('span', class_='product-price').text.strip() # 假设价格在<span class='product-price'>中data.append({'name': name, 'price': price})# 随机延迟,避免被封禁time.sleep(random.uniform(1, 3))except requests.RequestException as e:print(f'请求错误: {e}')except Exception as e:print(f'解析错误: {e}')# 将数据保存为CSV文件
df = pd.DataFrame(data)
df.to_csv('products.csv', index=False, encoding='utf-8-sig')print('数据抓取完成,已保存为products.csv')
代码说明:
- 请求头:使用
User-Agent
伪装成浏览器,减少被封禁的风险。 - 分页处理:通过循环遍历多个页面,抓取每一页的数据。
- 异常处理:使用
try...except
块来捕获请求和解析中的错误,确保爬虫在遇到问题时不会崩溃。 - 随机延迟:在请求之间添加随机延迟,以减少被网站识别为爬虫的风险。
- 数据存储:使用
pandas
将抓取的数据存储为CSV文件,方便后续分析。