命令与代码模板

环境安装命令、常用 CLI,以及一段可直接改用的“采集→解析→入库→统计”骨架。

一、环境与命令

命令作用
pip install requests lxml beautifulsoup4 pandas装本课核心库
pip install scrapy装爬虫框架
python -m pip install -i <镜像> 包名用国内源加速安装
scrapy startproject 名创建 Scrapy 项目
scrapy genspider 名 域名生成爬虫
scrapy crawl 名 -O out.json运行并输出 JSON
scrapy shell url交互式调试页面
flume-ng agent -n a1 -f conf启动 Flume 采集
kafka-topics.sh --create --topic t --bootstrap-server localhost:9092建 Kafka topic

二、骨架代码

▶ 改一改选择器就能用
PYTHON
# 采集 → 解析 → 入库 → 统计:一条龙骨架
import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}


def fetch(url):
    """拿页面,带超时与状态码检查"""
    r = requests.get(url, headers=headers, timeout=10)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text


def parse(html):
    """抽字段:标题 + 链接(按实际页面结构改选择器)"""
    soup = BeautifulSoup(html, "html.parser")
    return [{"标题": a.get_text(strip=True), "链接": a.get("href")}
            for a in soup.select("a.news")]


def save(rows, path="news.csv"):
    with open(path, "w", encoding="utf-8", newline="") as f:
        w = csv.DictWriter(f, fieldnames=["标题", "链接"])
        w.writeheader()
        w.writerows(rows)


def analyze(path="news.csv"):
    df = pd.read_csv(path).drop_duplicates().dropna()
    print(df.head())
    print("共", len(df), "条")


if __name__ == "__main__":
    rows = parse(fetch("https://example.edu/news"))
    save(rows)
    analyze()
三个习惯① 请求一定带 timeout;② 抓完先存原始 HTML,解析错了不用重抓;③ 采集频率放慢,别给对方服务器压力。