使用Python和GitHub构建京东数据自动化采集项目

本文将介绍如何利用Python开发京东数据采集工具,并通过GitHub进行版本控制、协作和自动化执行,创建一个完整的电商数据采集解决方案。

项目概述

我们将开发一个能够自动采集京东商品信息的Python工具,并通过GitHub实现以下功能:

· 代码版本控制

· 团队协作开发

· 自动化任务执行

· 数据存储与管理

环境设置与GitHub初始化

  1. 创建GitHub仓库

首先在GitHub上创建新的仓库:

```bash

本地初始化

mkdir jd-data-collector

cd jd-data-collector

git init

添加README和.gitignore

echo "# JD Data Collector" >> README.md

echo "pycache/" >> .gitignore

echo "*.pyc" >> .gitignore

echo "data/" >> .gitignore

echo "venv/" >> .gitignore

连接到远程仓库

git remote add origin https://github.com/your-username/jd-data-collector.git

```

  1. 设置Python环境

创建并激活虚拟环境:

```bash

创建虚拟环境

python -m venv venv

激活虚拟环境 (Windows)

venv\Scripts\activate

激活虚拟环境 (Mac/Linux)

source venv/bin/activate

安装依赖包

pip install requests beautifulsoup4 selenium pandas lxml

```

  1. 项目结构设计

创建以下项目结构:

```

jd-data-collector/

├── src/

│ ├── init.py

│ ├── crawler.py # 主要采集逻辑

│ ├── parser.py # 页面解析器

│ └── utils.py # 工具函数

├── config/

│ └── settings.py # 配置文件

├── data/ # 采集的数据(添加到.gitignore)

│ └── outputs/

├── tests/ # 测试代码

│ └── test_crawler.py

├── requirements.txt # 项目依赖

├── main.py # 主程序入口

└── README.md # 项目说明

```

核心代码实现

  1. 主要采集模块 (src/crawler.py)

```python

import requests

from bs4 import BeautifulSoup

import time

import random

from .utils import create_session, rotate_user_agent

class JDCrawler:

def init(self, keywords, max_pages=5, delay=1.5):

self.keywords = keywords

self.max_pages = max_pages

self.delay = delay

self.session = create_session()

def fetch_search_results(self, keyword, page):

"""获取搜索页面结果"""

url = f'https://search.jd.com/Search?keyword={keyword}\&page={page}'

headers = {'User-Agent': rotate_user_agent()}

try:

response = self.session.get(url, headers=headers)

response.raise_for_status()

return response.text

except Exception as e:

print(f"请求失败: {str(e)}")

return None

def parse_products(self, html_content):

"""解析商品信息"""

if not html_content:

return []

soup = BeautifulSoup(html_content, 'html.parser')

products = []

items = soup.find_all('div', class_='gl-i-wrap')

for item in items:

try:

product = {

'name': item.find('div', class_='p-name').get_text(strip=True),

'price': item.find('div', class_='p-price').get_text(strip=True),

'shop': item.find('div', class_='p-shop').get_text(strip=True) if item.find('div', class_='p-shop') else '',

'comment': item.find('div', class_='p-commit').get_text(strip=True) if item.find('div', class_='p-commit') else ''

}

products.append(product)

except Exception as e:

print(f"解析商品时出错: {str(e)}")

continue

return products

def crawl(self):

"""执行采集任务"""

all_products = []

for keyword in self.keywords:

print(f"正在采集关键词: {keyword}")

for page in range(1, self.max_pages + 1):

print(f"采集第 {page} 页...")

html_content = self.fetch_search_results(keyword, page)

products = self.parse_products(html_content)

all_products.extend(products)

添加随机延迟,避免被封IP

time.sleep(random.uniform(self.delay, self.delay + 1.0))

return all_products

```

  1. 工具函数 (src/utils.py)

```python

import random

def rotate_user_agent():

"""随机生成User-Agent"""

user_agents = [

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',

'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15',

'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36',

'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0'

]

return random.choice(user_agents)

def create_session():

"""创建请求会话"""

session = requests.Session()

可以在这里添加代理、Cookie等配置

return session

```

  1. 主程序入口 (main.py)

```python

from src.crawler import JDCrawler

import pandas as pd

import json

import os

from datetime import datetime

def main():

配置采集参数

keywords = ["手机", "笔记本电脑", "平板电脑"]

max_pages = 3

创建采集器实例

crawler = JDCrawler(keywords, max_pages)

执行采集

products = crawler.crawl()

保存结果

if products:

创建数据目录

os.makedirs("data/outputs", exist_ok=True)

生成文件名(含时间戳)

timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

filename = f"data/outputs/jd_products_{timestamp}"

保存为CSV

df = pd.DataFrame(products)

df.to_csv(f"{filename}.csv", index=False, encoding='utf-8-sig')

保存为JSON

with open(f"{filename}.json", 'w', encoding='utf-8') as f:

json.dump(products, f, ensure_ascii=False, indent=2)

print(f"采集完成!共获取 {len(products)} 条商品数据")

print(f"数据已保存至: {filename}.csv 和 {filename}.json")

else:

print("未采集到任何数据")

if name == "main":

main()

```

GitHub自动化工作流

  1. 设置GitHub Actions自动执行

创建 .github/workflows/run_crawler.yml 文件:

```yaml

name: Run JD Crawler Daily

on:

schedule:

  • cron: '0 2 * * *' # 每天UTC时间2点运行(北京时间10点)

workflow_dispatch: # 允许手动触发

jobs:

run-crawler:

runs-on: ubuntu-latest

steps:

  • name: Checkout code

uses: actions/checkout@v2

  • name: Set up Python

uses: actions/setup-python@v2

with:

python-version: '3.9'

  • name: Install dependencies

run: |

python -m pip install --upgrade pip

pip install -r requirements.txt

  • name: Run crawler

run: |

python main.py

  • name: Upload data as artifact

uses: actions/upload-artifact@v2

with:

name: jd-data

path: data/outputs/

  • name: Commit and push if changed

run: |

git config --local user.email "action@github.com"

git config --local user.name "GitHub Action"

git add data/outputs/

git diff --quiet && git diff --staged --quiet || git commit -m "Auto-commit collected data"

git push

```

  1. 配置 requirements.txt

```

requests==2.25.1

beautifulsoup4==4.9.3

selenium==3.141.0

pandas==1.3.0

lxml==4.6.3

```

团队协作与项目管理

  1. 分支策略

· main 分支:稳定版本,受保护

· develop 分支:开发集成分支

· 功能分支:feature/功能名称

· 修复分支:fix/问题描述

  1. Issue和项目管理

使用GitHub Issues跟踪功能和问题:

· 标记优先级(high, medium, low)

· 分配负责人

· 关联到项目看板

· 使用里程碑管理版本

  1. Pull Request流程

  2. 从最新

相关推荐
DO_Community3 小时前
普通服务器都能跑:深入了解 Qwen3-Next-80B-A3B-Instruct
人工智能·开源·llm·大语言模型·qwen
WWZZ20253 小时前
快速上手大模型:机器学习3(多元线性回归及梯度、向量化、正规方程)
人工智能·算法·机器学习·机器人·slam·具身感知
deephub4 小时前
深入BERT内核:用数学解密掩码语言模型的工作原理
人工智能·深度学习·语言模型·bert·transformer
PKNLP4 小时前
BERT系列模型
人工智能·深度学习·bert
应用市场4 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
兰亭妙微4 小时前
ui设计公司审美积累 | 金融人工智能与用户体验 用户界面仪表盘设计
人工智能·金融·ux
东方佑4 小时前
从字符串中提取重复子串的Python算法解析
windows·python·算法
AKAMAI5 小时前
安全风暴的绝地反击 :从告警地狱到智能防护
运维·人工智能·云计算
岁月宁静5 小时前
深度定制:在 Vue 3.5 应用中集成流式 AI 写作助手的实践
前端·vue.js·人工智能
Dfreedom.5 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型