命令与代码模板
环境安装命令、常用 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 |
二、骨架代码
▶ 改一改选择器就能用
# 采集 → 解析 → 入库 → 统计:一条龙骨架
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,解析错了不用重抓;③ 采集频率放慢,别给对方服务器压力。