CSV文件自动化生成:用Pandas与Datetime高效处理商品信息

在电商行业的激烈竞争下,实时掌握商品的价格波动和库存信息是企业成功的关键。通过自动化爬虫技术,我们可以从京东等电商平台抓取商品信息,帮助企业和个人进行市场监控和价格分析。本文将详细介绍如何使用Python的pandasdatetime库抓取京东商品的名称、价格等信息,并自动生成CSV文件。同时,结合代理IP技术提升爬取效率。

1. 概述

抓取电商平台的数据,尤其是像京东这样的热门网站,面临诸多挑战。主要包括反爬机制、IP封禁以及频繁请求的限制。为应对这些问题,本文结合了以下几项关键技术:

  • pandas: 用于处理爬取的数据,并将其保存为CSV文件,便于后续分析。
  • datetime: 用于生成带时间戳的文件名,方便对不同时间段的数据进行区分和管理。
  • 代理IP技术: 使用代理IP可以绕过IP请求频率限制,以保证爬取的连续性。本文使用爬虫代理服务作为示例。
  • User-Agent 和 Cookies: 模拟浏览器访问,避免被目标网站识别为爬虫,提高数据抓取的成功率。

在本文中,我们将展示如何从京东抓取商品的名称、价格等信息,并将其以CSV格式保存。

2. 细节

2.1 爬虫环境设置

首先,我们需要设置HTTP请求的headers,以模拟浏览器访问京东,防止被网站识别为爬虫。同时,使用代理IP来避免因频繁请求导致的IP封禁。

python 复制代码
import requests
import pandas as pd
from datetime import datetime
from bs4 import BeautifulSoup

# 代理IP配置 (以亿牛云为例 www.16yun.cn)
proxy = {
    'http': 'http://username:[email protected]:8000',
    'https': 'https://username:[email protected]:8000'
}

# 请求头配置,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
    'Cookie': 'your_cookie_here'  # 设置为你实际从浏览器中获取的cookie
}

# 京东目标URL,搜索某一类商品,例如"手机"
url = 'https://search.jd.com/Search?keyword=手机&enc=utf-8'

# 发起HTTP请求,使用代理IP
response = requests.get(url, headers=headers, proxies=proxy)

# 检查请求是否成功
if response.status_code == 200:
    print("数据爬取成功!")
    # 解析HTML内容
    soup = BeautifulSoup(response.content, 'html.parser')
else:
    print(f"请求失败,状态码:{response.status_code}")

2.2 数据处理:采集商品名称和价格

通过爬虫抓取京东商品数据后,接下来我们需要提取商品的名称、价格等信息。京东页面通常包含商品的divli元素,这些元素内嵌商品的详细信息。

python 复制代码
# 获取商品列表
product_list = soup.find_all('li', class_='gl-item')

# 初始化列表,用于存储商品信息
data = []

# 遍历商品列表,提取商品名称和价格
for product in product_list:
    # 商品名称
    name = product.find('div', class_='p-name').text.strip()
    
    # 商品价格(有些商品可能未显示价格,因此需做异常处理)
    try:
        price = product.find('div', class_='p-price').strong.i.text.strip()
    except AttributeError:
        price = '暂无价格'

    # 将商品信息存入data列表
    data.append([name, price])

# 使用pandas将数据转换为DataFrame
df = pd.DataFrame(data, columns=['商品名称', '价格'])

# 打印数据预览
print(df.head())

2.3 保存为CSV文件

在成功抓取和处理数据后,我们可以使用pandas将数据保存为CSV文件。为了便于管理,我们可以为文件名加入当前时间戳,确保每次生成的文件都是唯一的。

python 复制代码
# 获取当前时间,生成文件名
current_time = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
file_name = f'jd_products_{current_time}.csv'

# 将DataFrame保存为CSV文件
df.to_csv(file_name, index=False, encoding='utf-8')

print(f"数据成功保存至 {file_name}")

2.4 代理IP的应用与优化

在电商平台抓取数据时,IP封禁是一个常见的问题。为确保爬虫的长期运行,使用代理IP能够避免同一IP地址因过于频繁的请求而被封禁。

在本文中,我们通过爬虫代理的配置将请求代理到不同的IP,这样可以有效减少因频繁请求导致的封禁风险。上面代码中proxy变量的配置就是使用代理的示例。

如果需要进一步优化,还可以考虑使用多线程或异步请求,提升爬取速度。下面是使用多线程并发爬取的示例:

python 复制代码
from concurrent.futures import ThreadPoolExecutor

# 定义爬取函数
def fetch_product_data(url):
    response = requests.get(url, headers=headers, proxies=proxy)
    if response.status_code == 200:
        soup = BeautifulSoup(response.content, 'html.parser')
        product_list = soup.find_all('li', class_='gl-item')
        data = []
        for product in product_list:
            name = product.find('div', class_='p-name').text.strip()
            try:
                price = product.find('div', class_='p-price').strong.i.text.strip()
            except AttributeError:
                price = '暂无价格'
            data.append([name, price])
        return data
    else:
        return []

# 使用线程池并发爬取多个页面
urls = ['https://search.jd.com/Search?keyword=手机&page={}'.format(page) for page in range(1, 4)]

with ThreadPoolExecutor(max_workers=5) as executor:
    results = list(executor.map(fetch_product_data, urls))

# 合并结果并保存为CSV
all_data = [item for sublist in results for item in sublist]
df = pd.DataFrame(all_data, columns=['商品名称', '价格'])

# 保存为CSV文件
file_name = f'jd_products_{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.csv'
df.to_csv(file_name, index=False, encoding='utf-8')

print(f"所有商品数据成功保存至 {file_name}")

3. 总结

本文详细介绍了如何通过Python的pandasdatetime库实现京东商品数据的爬取与自动化保存。通过使用代理IP、设置合理的请求头和并发爬取技术,我们可以有效提高爬虫的效率和稳定性。最终,商品数据将被保存为带有时间戳的CSV文件,便于后续的数据分析和处理。

相关推荐
Wnq100721 小时前
智能巡检机器人在化工企业的应用研究
运维·计算机视觉·机器人·智能硬件·deepseek
tf的测试笔记4 小时前
测试团队UI自动化实施方案
运维·自动化
TDD_06284 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
头孢头孢4 小时前
k8s常用总结
运维·后端·k8s
遇码4 小时前
单机快速部署开源、免费的分布式任务调度系统——DolphinScheduler
大数据·运维·分布式·开源·定时任务·dolphin·scheduler
爱编程的王小美5 小时前
Docker基础详解
运维·docker·容器
学习至死qaq5 小时前
windows字体在linux访问异常
linux·运维·服务器
IEVEl5 小时前
Centos7 安装 TDengine
运维·centos·时序数据库·tdengine
在野靡生.6 小时前
Ansible(4)—— Playbook
linux·运维·ansible
烨鹰6 小时前
戴尔电脑安装Ubuntu双系统
linux·运维·ubuntu