爬虫指南top one

🕸️ 什么是网络爬虫?

一段能自动浏览网页、提取信息的程序

🤖

核心定义

网络爬虫(Web Crawler / Spider)是一种自动化程序,它能够模拟浏览器的行为,按照一定的规则, 自动地浏览互联网并从网页中抓取、提取、存储数据。 就像蜘蛛在蜘蛛网上爬行,从一个节点跳到下一个节点。

🕷️ 蜘蛛网比喻

网站A网站B网站C网站D网站E网站F网站G🕷️

爬虫(蜘蛛)从中心出发,沿链接跳转到各个网站节点

⚡ 爬虫 vs 人工浏览

维度 人工浏览 爬虫程序
速度 1页/分钟 1000页/秒
工作时间 8小时/天 24小时/天
准确性 容易出错 精确无误
规模 数十个网页 数十亿网页
成本 高(人力) 低(服务器)

🧩 爬虫的核心组成

📡

下载器 Downloader

发送 HTTP 请求,获取网页原始内容

🔍

解析器 Parser

从 HTML/JSON 中提取目标数据

📋

URL 调度器 Scheduler

管理待爬取 URL 队列,去重调度

💾

存储器 Storage

将数据存入 CSV / JSON / 数据库

Chapter 02

⚙️ 爬虫工作原理

从发送请求到存储数据,五步完成一次完整爬取

📋URL 队列种子URL集合去重 · 调度取出URL📡HTTP 请求GET / POSTheaders · cookies响应内容🔍HTML 解析CSS选择器XPath · regex提取数据💾数据存储CSV / JSONMySQL / MongoDB新URL入队🔄发现新 URL提取页面内链接加入队列继续♻️ 循环爬取,直到队列为空或达到目标STEP 1STEP 2STEP 3STEP 4STEP 5

📡 HTTP 请求详解

💻爬虫程序本地客户端Python 代码🌐目标网站Web Server返回HTMLHTTP 请求GET / POSTHTTP 响应200 OK + HTML请求头 Headers:User-Agent / Cookie响应码:200✅ 404❌ 403🚫 503⚠️域名解析 DNS → IP → TCP 握手 → 传输

🔍 HTML 解析结构

<html><head><body><div><h1><p><span><a href>🎯 提取目标用 CSS 选择器 / XPath 定位目标节点

Chapter 03

🚀 爬虫的应用场景

现实中爬虫无处不在,这些场景你一定不陌生

🔎

搜索引擎

Google、百度等搜索引擎用爬虫(称为 Spider/Bot)持续抓取全网页面,建立搜索索引。 没有爬虫,就没有搜索引擎。

Googlebot百度蜘蛛全网索引

💹

价格监控

电商平台监控竞品价格,比价网站实时抓取商品信息, 帮助用户在最优价格时购买商品。

比价网站竞品分析价格预警

📰

新闻聚合

各大资讯 App 通过爬虫抓取全网新闻, 经过分类、推荐算法,推送给用户感兴趣的内容。

今日头条内容聚合RSS

🔬

学术研究

研究人员爬取社交媒体数据、学术论文、政府公开数据, 用于舆情分析、自然语言处理训练等。

NLP语料舆情分析大数据

📊

数据分析

抓取股票行情、房产信息、招聘数据, 结合 Pandas/Matplotlib 进行深度分析和可视化。

股票数据房价分析求职趋势

🤖

AI 训练数据

大型语言模型的训练数据(如 Common Crawl)来源于 对互联网的大规模爬取,是 AI 发展的基础。

语料库图像数据集LLM训练

📊 爬虫技术应用领域分布

搜索引擎100%AI 训练数据86%数据分析76%价格监控65%新闻聚合55%学术研究41%

Chapter 04

💻 爬虫使用方法

从简单到高级,循序渐进掌握 Python 爬虫实战

1

基础爬虫 --- requests + BeautifulSoup

适合静态网页,入门首选,5分钟上手

01_basic_crawler.py

复制代码
# 安装:pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup

# ① 设置请求头(模拟浏览器)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0)',
    'Accept-Language': 'zh-CN,zh;q=0.9'
}

# ② 发送 GET 请求
url = 'https://example.com/news'
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = 'utf-8'

# ③ 解析 HTML
soup = BeautifulSoup(resp.text, 'html.parser')

# ④ CSS选择器提取数据
titles = soup.select('h2.news-title a')
for t in titles:
    print(t.get_text(strip=True))
    print(t.get('href'))

# ⑤ 提取表格数据
table = soup.find('table', {'class': 'data-table'})
rows = table.find_all('tr')
for row in rows[1:]:
    cols = [td.get_text() for td in row.find_all('td')]
    print(cols)

🎯 常用 BS4 选择方法

方法 说明
find(tag) 查找第一个匹配标签
find_all(tag) 查找所有匹配标签
select('css') CSS选择器,返回列表
.text / .get_text() 获取文本内容
.get('href') 获取属性值
.parent / .children 父/子节点导航

💡 适用场景内容在 HTML 源码中直接存在的静态页面,如新闻、博客、百科等。

2

数据保存 --- CSV / JSON / 数据库

将抓取的数据结构化存储,便于后续分析

02_save_data.py

复制代码
import csv, json
import pandas as pd
import sqlite3

# ─── 保存到 CSV ───
data = [
    {'标题': '新闻1', '链接': 'https://...', '时间': '2026-06'},
    {'标题': '新闻2', '链接': 'https://...', '时间': '2026-06'},
]
df = pd.DataFrame(data)
df.to_csv('news.csv', encoding='utf-8-sig', index=False)

# ─── 保存到 JSON ───
with open('news.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# ─── 保存到 SQLite ───
conn = sqlite3.connect('spider.db')
df.to_sql('news', conn, if_exists='append', index=False)
conn.close()

💾 存储方式对比

📄

CSV:简单通用,Excel 可直接打开,适合小数据

🔧

JSON:保留嵌套结构,API 友好,前端常用

🗄️

SQLite:轻量数据库,无需服务器,适合中小项目

🐘

MySQL/PostgreSQL:大规模生产环境,支持并发查询

🍃

MongoDB:文档型,灵活存储不固定结构的爬取数据

3

动态页面爬虫 --- Playwright(处理 JavaScript 渲染)

适合 Vue/React 构建的 SPA 应用、需要点击交互的页面

03_playwright_spider.py

复制代码
# 安装:pip install playwright
# playwright install chromium
from playwright.sync_api import sync_playwright
import json

with sync_playwright() as p:
    # 启动浏览器(headless=True 无界面模式)
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()

    # 访问目标页面
    page.goto('https://example.com/list')

    # 等待内容加载完毕
    page.wait_for_selector('.item-list')

    # 模拟滚动加载更多
    page.evaluate('window.scrollTo(0,9999)')
    page.wait_for_timeout(2000)

    # 点击下一页按钮
    page.click('button.next-page')

    # 提取数据
    items = page.query_selector_all('.item-card')
    for item in items:
        title = item.query_selector('h3').inner_text()
        price = item.query_selector('.price').inner_text()
        print(title, price)

    browser.close()

🎭 Playwright 核心操作

操作 代码
访问页面 page.goto(url)
点击元素 page.click(selector)
填写表单 page.fill('#input', text)
截图 page.screenshot(path='x.png')
等待元素 page.wait_for_selector(css)
执行JS page.evaluate('...')

⚡ 静态 vs 动态页面判断右键查看源代码,若数据不在源码中,说明是 JS 动态渲染,需用 Playwright/Selenium。

4

工业级框架 --- Scrapy 分布式爬虫

异步高并发,适合大规模抓取,生产环境首选

04_scrapy_spider.py

复制代码
# scrapy startproject myspider
# scrapy genspider news_spider example.com
import scrapy

class NewsSpider(scrapy.Spider):
    name = 'news_spider'
    start_urls = ['https://news.example.com']

    # 自定义请求头
    custom_settings = {
        'DOWNLOAD_DELAY': 1,         # 限速1秒
        'CONCURRENT_REQUESTS': 8,     # 并发数
        'ROBOTSTXT_OBEY': True,       # 遵守robots.txt
    }

    def parse(self, response):
        # 提取当前页数据
        for article in response.css('article.news-item'):
            yield {
                'title': article.css('h2::text').get(),
                'url':   article.css('a::attr(href)').get(),
                'date':  article.css('.date::text').get(),
            }
        # 自动跟进下一页(递归爬取)
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)

🏗️ Scrapy 架构图

⚙️ Engine🕷️ Spider📋 Scheduler📡 Downloader💾 Pipeline📦 Item

Chapter 05

📦 主流爬虫库对比

按需选择最合适的工具,不同场景各有最优解

库名称 类型 学习难度 是否支持JS 并发性能 适用场景
requests HTTP客户端 ❌ 不支持 静态页面、API接口
BeautifulSoup HTML解析 --- --- 配合requests解析HTML
lxml 高速解析 ⭐⭐ ❌ 不支持 高(C语言底层) 大量HTML/XML解析
Scrapy 爬虫框架 ⭐⭐⭐ ⚠️ 需插件 极高(异步) 大规模抓取、生产环境
Playwright 浏览器自动化 ⭐⭐ ✅ 完整支持 JS渲染、登录交互
Selenium 浏览器自动化 ⭐⭐ ✅ 完整支持 低(较慢) Web测试、旧版兼容
httpx 异步HTTP ⭐⭐ ❌ 不支持 高(async/await) 异步爬虫、API爬取

🌳 爬虫工具选择决策树

需要爬取数据?页面是 JS 动态渲染的?(右键源码中是否有数据)静态 / No动态 / Yes需要大规模抓取?(万级以上页面)小规模requests+ BeautifulSoup大规模Scrapy异步框架 高性能需要复杂交互操作?(登录/点击/填表)Playwright支持JS · 交互操作仅JS渲染httpx + async或拦截 API 接口

Chapter 06

🛡️ 反爬机制与应对策略

了解网站的防护手段,写出更稳健的爬虫

🚫 常见反爬手段

🔒

User-Agent 检测:识别非浏览器请求头直接拒绝

⏱️

访问频率限制:短时间大量请求触发 IP 封禁

🧩

验证码(CAPTCHA):图形验证码、滑块验证

🍪

Cookie / Session 验证:需要登录状态才能访问

🔄

动态 Token:每次请求参数加密或随机变化

🌐

IP 封禁:检测同一 IP 异常流量后封禁

🕵️

指纹识别:浏览器指纹、TLS 指纹检测

05_anti_anti_spider.py

复制代码
import time, random
import requests

# ① 随机 User-Agent
ua_list = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X)...',
]
headers = {'User-Agent': random.choice(ua_list)}

# ② 随机延时(模拟人工浏览)
time.sleep(random.uniform(1.5, 3.5))

# ③ 使用 Session 保持 Cookie
session = requests.Session()
session.get('https://example.com/login')

# ④ 设置 Referer 等请求头
headers['Referer'] = 'https://example.com/list'
headers['Accept'] = 'text/html,application/xhtml+xml'

# ⑤ 代理 IP 轮换(需代理池服务)
proxies = {'http': 'http://proxy_ip:port'}
resp = session.get(url, proxies=proxies)

✅ 应对策略总结

模拟浏览器行为

设置真实 User-Agent、Referer、Accept,使用随机延时 1~3 秒

维护 Cookie

用 requests.Session() 自动携带 Cookie,或先登录获取凭证

IP 轮换 / 代理池

构建代理 IP 池,每隔若干请求切换 IP,避免封禁

使用无头浏览器

Playwright 自带真实浏览器环境,绕过大多数 JS 检测

请求频率控制

Scrapy 设置 DOWNLOAD_DELAY,避免服务器过载触发封禁

⚠️ 重要提示反爬应对措施仅供技术学习,实际使用时必须遵守网站的 robots.txt 和服务条款,不得对服务器造成过大压力。

Chapter 07

⚖️ 爬虫合规与法律须知

技术有边界,合法使用爬虫是每个开发者的基本素养

✅ 合规做法

遵守网站 robots.txt 中的爬虫规则

只爬取公开可访问的数据,不破解登录

控制请求频率,不对服务器造成过大负担

尊重版权,不大规模复制付费内容

不收集、存储、传播个人隐私信息

用于合法的研究、学习、商业数据分析

06_check_robots.py

复制代码
from urllib.robotparser import RobotFileParser

# 检查 robots.txt 是否允许爬取
rp = RobotFileParser()
rp.set_url('https://example.com/robots.txt')
rp.read()

# 检查某个路径是否被允许
can_fetch = rp.can_fetch('*', 'https://example.com/data')
print('允许爬取:', can_fetch)  # True / False

🚨 违规红线

绕过登录验证,未授权访问需要权限的数据

大规模爬取导致服务器瘫痪(DDoS)

爬取并倒卖用户隐私数据(姓名/手机/地址)

抓取付费内容进行商业再分发

用于恶意竞争、价格欺诈等不正当目的

违反《网络安全法 》《数据安全法》等法规

⚖️ 法律风险提示我国《计算机信息网络国际联网安全保护管理办法》《数据安全法》对非法获取数据有明确处罚规定,情节严重者可追究刑事责任。开发爬虫前,务必确认合法性。

robots.txt 示例

复制代码
# 所有爬虫都不允许访问 /admin/
User-agent: *
Disallow: /admin/
Disallow: /private/

# Google 允许访问所有页面
User-agent: Googlebot
Allow: /

# 爬取频率限制
Crawl-delay: 1

💡 黄金原则:己所不欲,勿施于人设身处地想想:如果你是网站运营者,你能接受什么样的爬取行为? 合理的爬取速度 + 公开数据 + 合法用途 = 值得鼓励的技术实践。

Chapter 08

🗺️ 爬虫学习路线

从零到爬虫工程师的系统成长路径

1

Python 基础 + HTTP 协议(1-2周)

掌握字符串操作、列表字典、函数、文件读写;理解 HTTP 请求/响应报文结构,状态码含义(200/301/403/404/503)。

2

requests + BeautifulSoup 入门(1-2周)

抓取静态新闻、产品列表页;学习 CSS 选择器和 XPath;完成:豆瓣电影 Top250 爬取并保存 CSV。

3

动态页面 + API 接口分析(2周)

用 Chrome DevTools Network 面板抓包分析真实 API;学会解析 JSON 响应;处理分页、Ajax 请求;使用 Playwright 模拟操作。

4

Scrapy 框架 + 数据管道(2-3周)

搭建完整 Scrapy 项目;自定义 Spider / Item / Pipeline;接入 MySQL 或 MongoDB;实现断点续爬。

5

实战项目 + 数据分析(持续)

完整项目:招聘数据分析(拉勾/Boss直聘)、房价地图、舆情监控;结合 Pandas/Matplotlib 制作数据可视化报告;上传 GitHub 形成作品集。

网址可查:http://127.0.0.1:7789/web_crawler_guide.html

相关推荐
夏末蝉未鸣012 小时前
跨境IT应用(4):用爬虫把产品关键词排名存进数据库,让运营随时回溯
爬虫
深蓝电商API15 小时前
大模型 + 爬虫 = ?我用 AI 做了一个自适应反反爬引擎
人工智能·爬虫
༒࿈南林࿈༒16 小时前
国家医保局 API 加密体系逆向全记录——SM2签名 + SM4加解密 + SHA256 头签名
爬虫·大模型应用·mcp·skills
跨境数据猎手16 小时前
复刻Cssbuy跨境淘宝代购集运系统搭建方案
爬虫·架构·系统架构
郑洁文21 小时前
基于网络爬虫的XSS漏洞检测系统的设计与实现
网络·爬虫·网络安全·xss
Super Scraper1 天前
如何将赋予千问(Qwen Code)网络检索功能:集成MCP服务器
人工智能·爬虫·ai·自动化·千问·mcp·qwen code
SilentSamsara1 天前
爬虫工程化:Playwright + 反反爬 + 数据清洗管道实战
开发语言·爬虫·python·青少年编程·playwright
专注VB编程开发20年1 天前
Python爬虫、提取网页内容,免费调用谷歌翻译接口
爬虫·python·信息可视化
Data 实验室1 天前
TaskPyro爬虫管理平台 v2.3.4:脚本即接口,调度即编排
爬虫