Web 爬虫作业
共 23 道作业,分为 8 个阶段,涵盖开发环境配置、网页解析、API 采集、Playwright 自动化、登录与反爬、抓包分析、实战工具和期末报告。所有作业均以小令书平台为练习目标,点击卡片打开对应练习页面。
第一阶段:基础入门
搭建开发环境,理解网页结构与 HTTP 协议基础。
开发环境配置
安装 VSCode、配置 Python 虚拟环境(venv)、安装核心爬虫库(requests、playwright)、安装 Playwright Chromium 浏览器。使用 Playwright 自动化注册小令书平台,填写姓名、学号、昵称、班级、简介完成注册,测试环境配置是否正常,初步了解课程平台。
练习目标:小令书注册页(自动化填写个人信息)
打开练习AI 辅助提示
修改代码中的 MY_NAME、MY_STUDENT_NO、MY_NICKNAME、MY_CLASS、MY_INTRO 为你的真实信息。page.locator("#name").fill() 用 CSS 选择器定位输入框填写内容,headless=False 显示浏览器窗口观察过程。
网页基础
理解 HTML 基本语法,掌握网页结构(head、body、header、nav、main、section、footer),练习 h1-h6、p、a、img、ul/ol/li 等标签,用 CSS 设置字体、颜色、布局。创建包含个人信息的网页(姓名、学号、班级),截图并上传到小令书平台发布笔记。
练习目标:本地创建 HTML/CSS 文件 + 截图上传到小令书
线下完成AI 辅助提示
创建 index.html 填写你的学号、姓名、班级信息,用 CSS 设置样式(#FF2442 是小令书主色)。完成后截图上传到小令书平台,发布笔记标题格式"作业2_学号_姓名"。
Chrome 开发者工具
使用 Chrome DevTools Network 面板分析小令书加载的资源类型(Doc、JS、CSS、图片、XHR),分析 HTTP 请求/响应头关键字段(User-Agent、Accept、Referer、Cookie、Content-Type、Status Code),分析 POST 请求的 Form Data 和响应数据。
练习目标:小令书首页 + 搜索页
打开练习AI 辅助提示
F12 打开 DevTools → Network 面板,刷新页面观察资源类型(Doc、JS、CSS、XHR)。点击请求查看 Headers,记录 User-Agent、Cookie、Status Code 等关键字段。
第二阶段:数据解析
掌握 HTTP 请求与网页数据解析的四种核心方法。
Requests 库 HTTP 请求
使用 Python Requests 库向小令书发送 GET/POST 请求,检查响应状态码(200、404、403)并处理编码问题,设置自定义请求头(User-Agent、Accept、Referer)和超时时间,用 BeautifulSoup 解析响应内容提取标题、导航链接和笔记列表。
练习目标:小令书首页 + 搜索页
打开练习AI 辅助提示
requests.get(url) 发送 GET 请求,response.status_code 判断状态码,headers={"User-Agent": "..."} 设置请求头,BeautifulSoup(response.text, "lxml") 解析页面。
XPath 解析网页
安装 lxml 库,学习 XPath 核心语法(//、/、@、text()、contains()、position()),用 lxml etree 解析小令书页面。练习 XPath 表达式手写,提取标题、链接、导航菜单,掌握相对路径 .// 从当前元素向下查找。
练习目标:小令书首页
打开练习AI 辅助提示
XPath 用 // 从任意节点查找,@ 选取属性,text() 选取文本。tree.xpath("//h3[@class='note-title']/text()") 提取标题,相对路径 .// 从当前元素向下查找。
BeautifulSoup 解析基础
安装 beautifulsoup4,用 BeautifulSoup 解析小令书页面,使用 find() 和 find_all() 提取链接、标题、段落和导航链接,提取文本内容(get_text)和属性值(get),从嵌套结构中提取笔记标题、作者、点赞数。
练习目标:小令书首页
打开练习AI 辅助提示
soup.find("a") 查找第一个链接,soup.find_all("a") 查找所有链接。link.get_text(strip=True) 提取文本,link.get("href") 提取属性值。
BeautifulSoup 解析进阶
使用 soup.select() 的 CSS 选择器(标签、class、ID、后代、属性选择器),高级 find_all 属性匹配(attrs),使用正则表达式配合 find_all 进行模糊匹配,编写自定义过滤函数提取特定数据。
练习目标:小令书首页
打开练习AI 辅助提示
soup.select(".note-card") 用 CSS 选择器,soup.select("h3.note-title") 复合选择器,soup.find_all("div", attrs={"data-id": True}) 属性匹配,自定义函数过滤。
正则表达式解析
学习正则核心语法(\d、\w、\s、.、*、+、?、[]、()),使用 re.search()、re.findall()、re.match() 方法,从小令书招聘页面提取邮箱、电话、座机、薪资范围等结构化信息,理解分组捕获。
练习目标:小令书招聘页面
打开练习AI 辅助提示
re.findall(r"[\w.-]+@[\w.-]+\.\w+", text) 提取邮箱,re.findall(r"1[3-9]\d{9}", text) 提取手机号,re.search(r"(\d+)-(\d+)K", text) 分组捕获薪资。
第三阶段:API 与存储
学会调用 JSON API 接口,掌握数据持久化存储方法。
数据存储
从小令书提取笔记数据,用 Python json 模块保存为 JSON 文件(ensure_ascii=False、indent=2),用 PyMySQL 连接 MySQL 数据库、建表、插入数据(参数化查询防 SQL 注入),提交事务并验证数据。
练习目标:小令书首页 + /api/feed.php
打开练习AI 辅助提示
json.dump(data, f, ensure_ascii=False, indent=2) 保存 JSON。pymysql.connect(host, user, password, database) 连接数据库,cursor.execute("INSERT ... VALUES (%s, %s)", (a, b)) 参数化查询。
API 数据采集基础
用 Chrome DevTools Network 面板发现隐藏 API 端点(XHR 筛选),请求 JSON 接口获取数据(response.json() 解析),理解请求头 Referer 的作用。调用小令书食堂菜单 API 和笔记 Feed API。
练习目标:小令书食堂菜单 API + Feed API
打开练习AI 辅助提示
requests.get("/api/canteen.php") 获取 JSON,response.json() 解析为字典。DevTools Network → XHR 筛选发现隐藏 API,headers={"Referer": "..."} 带来源请求。
请求头与反爬策略
理解为什么需要伪装请求头才能访问某些 API,掌握 User-Agent、Referer、Cookie 等请求头的构造方法。体验"不加 Headers → 失败 → 添加 Headers → 成功"的完整过程,逐层突破小令书电影页面的反爬机制。
练习目标:小令书电影反爬挑战
打开练习AI 辅助提示
先不加 Headers 请求 /api/movies.php 观察 403 错误,再逐步加 User-Agent、Referer。DevTools 右键请求 → Copy as cURL 获取完整 Headers。
第四阶段:Playwright 自动化
掌握 Playwright 浏览器自动化,实现复杂页面的交互与数据采集。
元素选取
安装配置 Playwright 浏览器环境,掌握三种元素定位方法:CSS 选择器(#id、.class、[attr])、XPath(//、contains)和文本定位(get_by_text)。使用 page.locator() 定位元素,获取文本内容和属性值。
练习目标:小令书选择器练习场
打开练习AI 辅助提示
page.locator("#id") ID 选择器,page.locator(".class") class 选择器,page.locator("[attr]") 属性选择器,page.get_by_text("文本") 文本定位。
角色定位与高级选择器
使用 Playwright 推荐的 role 定位方法:get_by_role() 定位按钮/链接/标题/列表,get_by_label() 通过标签文本定位表单输入,get_by_placeholder() 通过占位符定位输入框,get_by_role("checkbox") 定位复选框。
练习目标:小令书 ARIA 角色练习页
打开练习AI 辅助提示
page.get_by_role("button", name="提交") 角色定位按钮,page.get_by_role("link") 定位链接,page.get_by_label("邮箱") 标签定位输入框,page.get_by_placeholder("请输入") 占位符定位。
多元素定位与截图
用 Playwright 定位页面中的多个元素(.all() 获取列表),遍历元素提取文本和属性(.nth(i) 获取第 i 个),使用 page.screenshot() 截取全页,使用 element.screenshot() 截取特定元素,用 requests 下载图片。
练习目标:小令书图片网格页
打开练习AI 辅助提示
page.locator(".card").all() 获取所有元素列表,elements.nth(i) 获取第 i 个,page.screenshot(path="full.png", full_page=True) 全页截图,element.screenshot() 元素截图。
元素交互
用 Playwright 点击导航链接(.click()),使用 fill() 方法填写文本输入框,执行完整搜索流程:填写搜索框 → 点击提交 → wait_for_load_state("networkidle") → 提取结果,批量搜索多个关键词并统计结果。
练习目标:小令书搜索页
打开练习AI 辅助提示
page.fill("input[name='keyword']", "Python") 填写搜索框,page.click("button[type='submit']") 点击按钮,page.wait_for_load_state("networkidle") 等待加载完成。
页面操作与等待机制
理解 Playwright 的自动等待机制(元素可见、启用、稳定),掌握显式等待:wait_for_load_state()、wait_for_selector()、wait_for_function()。设置视口大小模拟不同设备,使用滚动操作浏览长页面。
练习目标:小令书无限滚动页
打开练习AI 辅助提示
page.wait_for_selector(".note-card") 等待元素出现,page.wait_for_load_state("networkidle") 等待网络空闲,page.set_viewport_size({"width": 1920, "height": 1080}) 设置视口,page.keyboard.press("End") 滚动。
第五阶段:登录与反爬
掌握 Cookie 管理、登录态维持和反爬虫策略。
表单登录与反爬策略
用 Playwright 模拟表单登录(填写姓名和学号、点击提交),理解反爬虫机制与应对策略:请求频率控制(time.sleep)、随机延迟(random.uniform)、User-Agent 轮换、robots.txt 协议和爬虫伦理。
练习目标:小令书登录页
打开练习AI 辅助提示
page.get_by_label("姓名").fill("你的姓名") 填写登录表单,page.get_by_role("button", name="登录").click() 点击提交。time.sleep(random.uniform(1, 3)) 随机延迟防爬。
Cookie 登录与状态维持
用 Playwright 登录小令书并提取 Cookie(context.cookies()),保存 Cookie 到 JSON 文件,从文件加载 Cookie 恢复登录态(context.add_cookies()),使用恢复的 Cookie 访问需要登录的页面(个人主页、发布页)。
练习目标:小令书 Cookie 管理练习
打开练习AI 辅助提示
context.cookies() 提取 Cookie,json.dump(cookies, f) 保存到文件,context.add_cookies(cookies) 加载恢复登录态,无需重复认证即可访问个人主页。
HAR 分析与大模型协作
用 Chrome DevTools 录制 HAR 文件(Network 面板 → Export all as HAR),分析 HAR 的 JSON 结构(log.entries 数组),将 HAR 内容提供给大语言模型分析,基于 LLM 分析结果生成爬虫代码。
练习目标:小令书 HAR 录制指南
打开练习AI 辅助提示
DevTools Network → 右键 → Save all as HAR with content。分析 HAR JSON 的 log.entries 数组,提取 request.url、response.content.text,提供给 LLM 分析生成爬虫代码。
第六阶段:高级抓包
掌握桌面客户端和 App 的网络抓包分析技术。
App 客户端抓包分析
安装配置 Fiddler 抓包工具(HTTPS 解密配置),捕获 PC 桌面应用网络流量(酷我音乐客户端),分析 API 请求的 URL、方法、参数和响应,导出捕获数据为 JSON 文件。
练习目标:酷我音乐 PC 客户端(线下完成)
线下完成AI 辅助提示
安装 Fiddler Classic,Tools → Options → HTTPS → 勾选 Decrypt HTTPS traffic。打开酷我音乐客户端浏览页面,在 Fiddler 中查看捕获的 API 请求,导出为 JSON。
第七阶段:实战工具
使用八爪鱼采集器进行复杂多页数据采集实战。
招聘职位数据采集实战
使用八爪鱼采集器进行复杂多页数据采集:从列表页提取职位链接,进入详情页采集职位名称、公司名称、薪资、工作地点、职位描述,设置列表循环和详情页循环规则,配置翻页采集多页数据。
练习目标:小令书招聘页 + 智联招聘
打开练习AI 辅助提示
八爪鱼设置列表循环提取职位链接 → 点击进入详情页 → 提取职位名称、薪资、要求 → 设置翻页规则 → 运行采集 → 导出 Excel。
八爪鱼机电新闻数据采集实战
安装配置八爪鱼采集器,创建采集任务输入目标网址,设置列表循环提取新闻链接,设置详情页循环提取标题、正文、时间、编辑等字段,使用八爪鱼内置正则清理数据,运行并导出 Excel。
练习目标:广东机电职业技术学院校园新闻(线下完成)
线下完成AI 辅助提示
八爪鱼创建任务 → 输入网址 → 设置列表循环(点击新闻标题)→ 详情页提取标题、正文、时间 → 使用正则清理数据 → 导出结果。
第八阶段:期末报告
综合运用全部技能完成数据分析报告。
期末报告
选择城市和职位关键词,用 Python(requests + BeautifulSoup 或 Playwright)或八爪鱼采集至少 100 条招聘数据。数据清洗后导入 Power BI 做可视化分析(薪资分布、经验需求、学历要求、技能词云),撰写专业分析报告并导出 PDF。
练习目标:拉勾网 + Power BI(线下完成)
时长:160 分钟
线下完成AI 辅助提示
用 requests + BeautifulSoup 或 Playwright 采集拉勾网至少 100 条数据 → 导出 Excel → Power BI 导入 → 数据清洗(薪资格式化)→ 制作可视化图表 → 撰写 PDF 报告。