python电商数据爬虫代码示例

47 阅读4分钟

电商网站通常有反爬机制,比如频率限制、验证码等,所以代码中可能需要加入一些应对措施,比如设置请求头、使用代理、延迟请求等。

然后,学员可能对技术选型有疑问,比如用Python的哪个库比较好。常见的爬虫库有requests和BeautifulSoup,或者Scrapy框架。对于简单的爬虫,requests加BeautifulSoup可能更合适,容易上手。如果需要处理JavaScript渲染的页面,可能需要Selenium或Playwright。但电商网站很多是动态加载的,所以可能需要考虑这一点。不过学员的问题可能更偏向于基础,所以先用静态页面处理。

接下来,我需要确定目标网站的结构。假设学员没有指定具体的电商平台,可能需要一个通用的例子。例如,抓取商品名称、价格、评价数量等。然后,我需要构造一个示例的HTML结构,方便写解析代码。或者,可以选一个示例网站,比如亚马逊的某个商品列表页,但实际中可能需要处理分页、登录等问题。

a2.png

另外,学员可能希望代码包含异常处理,比如网络错误、页面结构变化等。此外,存储数据的方式,比如保存到CSV文件或数据库,可能需要包含在代码中。

然后,我需要考虑代码的可扩展性。比如,学员可能需要后续扩展爬虫的功能,比如多线程、分布式爬取,或者集成代理池。但在初步的示例中,可能先保持简单。

最后,可能需要给出一些注意事项,比如尊重网站的服务条款,控制请求频率,避免对目标网站造成过大压力。同时,可能需要建议学员查看API是否可用,因为直接爬取网页可能不如使用官方API更高效和合法。

以下是一个使用Python编写的电商数据爬虫示例代码,主要针对静态页面抓取。请注意,实际应用中需遵守目标网站的robots.txt协议和相关法律法规。

import requests
from bs4 import BeautifulSoup
import time
import csv
​
# 配置请求头模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9'
}
​
def get_product_info(url):
    """获取单个商品信息"""
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查HTTP错误
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 示例解析逻辑(需根据实际网页结构调整)
        product_name = soup.find('h1', class_='product-title').text.strip()
        price = soup.find('span', class_='price').text.strip()
        rating = soup.find('div', class_='product-rating').get('data-score', 'N/A')
        
        return {
            'name': product_name,
            'price': price,
            'rating': rating,
            'url': url
        }
    except Exception as e:
        print(f"Error fetching {url}: {str(e)}")
        return Nonedef crawl_category(base_url, pages=3):
    """爬取分类页商品列表"""
    products = []
    for page in range(1, pages+1):
        url = f"{base_url}?page={page}"
        print(f"正在抓取第 {page} 页: {url}")
        
        try:
            response = requests.get(url, headers=headers)
            soup = BeautifulSoup(response.text, 'html.parser')
            
            # 提取商品链接(示例选择器)
            product_links = soup.select('a.product-link')
            for link in product_links:
                product_url = link['href']
                if not product_url.startswith('http'):
                    product_url = base_url + product_url
                product_data = get_product_info(product_url)
                if product_data:
                    products.append(product_data)
                time.sleep(1)  # 请求间隔防止被封
                
        except Exception as e:
            print(f"页面抓取失败: {str(e)}")
        
        time.sleep(2)  # 页面间延迟
    
    return products
​
def save_to_csv(data, filename):
    """保存数据到CSV文件"""
    keys = data[0].keys()
    with open(filename, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=keys)
        writer.writeheader()
        writer.writerows(data)
​
if __name__ == "__main__":
    # 示例使用(需替换实际URL)
    base_url = "https://example-store.com/category/electronics"
    products_data = crawl_category(base_url, pages=2)
    
    if products_data:
        save_to_csv(products_data, 'products.csv')
        print(f"成功抓取 {len(products_data)} 条数据")
    else:
        print("未抓取到有效数据")

注意事项

  1. 合法性验证
  • 检查目标网站的robots.txt文件(如:example-store.com/robots.txt
  • 遵守GDPR等数据保护法规
  • 不要抓取学员隐私数据
  1. 反爬应对措施
# 可添加以下增强功能
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080'
}
​
# 在requests.get中添加
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)

3. 动态页面处理: 对于JavaScript渲染的页面,建议使用:

  • Selenium
  • Playwright
  • Scrapy + Splash
  1. 推荐改进方向
  • 添加自动翻页功能
  • 实现分布式爬虫(Scrapy-Redis)
  • 设置随机User-Agent(使用fake_useragent库)
  • 异常重试机制
  • 数据清洗管道

重要提示:实际电商平台(如Amazon、淘宝等)都有严格的反爬机制,建议优先考虑:

  1. 使用官方API(如Amazon Product Advertising API)
  2. 购买合法数据服务
  3. 限制爬取频率(>3秒/请求)
  4. 仅用于学习目的

请根据具体需求修改CSS选择器和URL参数,并确保您的爬虫行为符合法律法规要求。