爬虫指南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集合去重 · 调度取出URLHTTP 请求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请求头 HeadersUser-Agent / Cookie响应码200✅ 404❌ 403 503⚠️域名解析 DNS → IP → TCP 握手 → 传输 HTML 解析结构htmlheadbodydivh1pspana 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;q0.9 } # ② 发送 GET 请求 url https://example.com/news resp requests.get(url, headersheaders, timeout10) 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(stripTrue)) 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.pyimport 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, encodingutf-8-sig, indexFalse) # ─── 保存到 JSON ─── with open(news.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) # ─── 保存到 SQLite ─── conn sqlite3.connect(spider.db) df.to_sql(news, conn, if_existsappend, indexFalse) 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: # 启动浏览器headlessTrue 无界面模式 browser p.chromium.launch(headlessTrue) 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(pathx.png)等待元素page.wait_for_selector(css)执行JSpage.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 ItemChapter 05 主流爬虫库对比按需选择最合适的工具不同场景各有最优解库名称类型学习难度是否支持JS并发性能适用场景requestsHTTP客户端⭐❌ 不支持低静态页面、API接口BeautifulSoupHTML解析⭐——配合requests解析HTMLlxml高速解析⭐⭐❌ 不支持高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.pyimport 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/xhtmlxml # ⑤ 代理 IP 轮换需代理池服务 proxies {http: http://proxy_ip:port} resp session.get(url, proxiesproxies)✅ 应对策略总结模拟浏览器行为设置真实 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.pyfrom 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️ 爬虫学习路线从零到爬虫工程师的系统成长路径1Python 基础 HTTP 协议1-2周掌握字符串操作、列表字典、函数、文件读写理解 HTTP 请求/响应报文结构状态码含义200/301/403/404/503。2requests BeautifulSoup 入门1-2周抓取静态新闻、产品列表页学习 CSS 选择器和 XPath完成豆瓣电影 Top250 爬取并保存 CSV。3动态页面 API 接口分析2周用 Chrome DevTools Network 面板抓包分析真实 API学会解析 JSON 响应处理分页、Ajax 请求使用 Playwright 模拟操作。4Scrapy 框架 数据管道2-3周搭建完整 Scrapy 项目自定义 Spider / Item / Pipeline接入 MySQL 或 MongoDB实现断点续爬。5实战项目 数据分析持续完整项目招聘数据分析拉勾/Boss直聘、房价地图、舆情监控结合 Pandas/Matplotlib 制作数据可视化报告上传 GitHub 形成作品集。网址可查http://127.0.0.1:7789/web_crawler_guide.html