符号表解释:
可根据知识点前的符号按需选学,并获取知识点描述和学习资源。
必学:核⼼知识点,经常⽤到。
建议学:重要知识点,专业⼈⼠的基⽯。
⾯试重点:经常出现的⾯试知识点。
可有可⽆:边缘区域,不是必须探索的地⽅。
知识描绘:知识点描述,快速理解。
学习资源:关联的学习资源。
学习⽬标:阶段性⽬标。
学习路线:爬虫
一、爬虫基础
1. 爬虫概述:
描述: 自动化程序,用于从网页提取信息和数据。
目标案例: 新闻聚合器 (利用 Scrapy 爬取不同新闻网站的新闻,整合到一个平台)。
学习资源:
2. 爬虫合法性: (必须学习,避免法律风险)
- 知识产权:避免侵犯网站知识产权(数据、文字、图片、音视频等)。
- 网络安全法:遵守中国网络安全法律法规,禁止网络攻击、破解、窃取、篡改等违法活动。
- 隐私保护:不擅自收集、存储、传播他人个人隐私信息(身份证号、手机号等)。
- 网站规则:遵守各网站的爬虫规则,尊重 robots.txt 文件。
- 合同和协议:遵守网站提供的 API 或其他爬取协议。
- 公序良俗:不传播违法、淫秽、暴力等有害信息。
二、数据抓取
1. 常用网络协议 (HTTP/HTTPS):
- HTTP: 用于 Web 数据传输的协议,定义客户端和服务器通信规则。
- HTTPS: HTTP 的安全版本,使用 SSL/TLS 加密数据传输。
2. HTTP 请求:
- 学习资源>>>
- 请求头: 包含请求元数据 (请求方法、目标 URL、用户代理、请求时间等)。
- 请求参数: 传递给服务器的数据 (GET 请求在 URL 中,POST 请求在请求体中)。
- 请求类型: GET、POST、PUT、DELETE 等。
3. HTTP 响应:
- 响应头: 包含响应元数据 (响应状态码、响应时间、服务器信息等)。
- 响应参数: 服务器返回的数据 (网页内容、JSON 数据、图片等)。
4. Requests 模块: (流行的第三方库,易于使用)
- 描述: 提供易于使用的 API 发送 HTTP 请求和处理响应 (GET、POST 等)。
学习资源:
5. urllib 模块: (Python 标准库,功能相对简单)
- 描述: 提供基本的 HTTP 请求功能,无需额外安装。
- 学习资源 >>>
三、模拟登录
- 使用 Requests 库: 发送登录请求,提交用户名和密码,处理 Cookie 保持登录状态。
- 使用 Selenium 库: 自动化浏览器操作,模拟用户交互完成登录 (适用于 JavaScript 生成的表单)。
四、网站抓取
1. 静态网站抓取:
- 使用 Requests 库: 发送 GET 请求,获取 HTML 响应,使用解析库 (如 BeautifulSoup) 提取数据。
- 使用 Scrapy 框架: 适用于爬取多个页面或网站,提供高级功能 (自动化页面遍历、数据存储、异步请求)。
2. 动态网站抓取:
- 使用 Selenium 库: 自动化浏览器,等待页面加载完成,提取数据。
- 使用无头浏览器: (如 Puppeteer, Playwright) 渲染 JavaScript 并提取内容。
五、无头浏览器
1. Selenium: 自动化测试工具,模拟用户在 Web 应用中的操作,支持多种编程语言和浏览器。
2. Puppeteer: Node.js 库,控制 Chrome 或 Chromium 浏览器进行自动化操作 (Web 抓取、测试、生成 PDF 等)。
六、数据解析
1. 常用标签 (HTML/XML): 基本的数据解析方法,通过标签名称、属性、层级结构定位和提取数据。
2. BeautifulSoup: Python 库,解析 HTML 和 XML,提供易于使用的 API 遍历文档树和提取数据。
3. 正则表达式: 强大的文本模式匹配工具,适用于简单的数据提取任务。
4. XPath: 在 XML 文档中定位和提取数据的语言,Python 中可使用 lxml 库处理。
七、数据导出
1. 文件:
- Excel: 使用 openpyxl 或 pandas 库导出到 Excel 文件。
- CSV: 使用 Python 内置库 csv 保存为 CSV 格式。
2. 数据库:
- MongoDB: NoSQL 数据库,使用 pymongo 库存储数据。
- MySQL: 关系型数据库,使用 mysql-connector 或其他 MySQL 连接库。
八、中间件
- Redis: 内存数据库,用于缓存和快速存储临时数据,使用 redis-py 库。
九、Scrapy 框架
1. 核心概念:
- 命令行工具: 创建、运行、调试和管理爬虫项目 (scrapy startproject, scrapy crawl, scrapy shell 等)。
- Spiders (爬虫): 定义如何抓取网站的结构和行为 (继承 scrapy.Spider 类)。
- Selectors (选择器): 从 HTML 或 XML 文档中提取数据 (XPath 和 CSS 选择器)。
- Items (数据项): 结构化和存储从网页提取的数据 (用户自定义的 Python 字典或类)。
- Item Loaders (数据加载器): 填充 Items,处理数据清洗、转换和预处理。
- Pipelines (管道): 处理爬取的数据 (存储、清洗、验证、导出等)。
- Scrapy Shell: 交互式工具,测试和调试 Scrapy 爬虫。
- Link Extractors (链接提取器): 从页面中提取链接 (例如 LinkExtractor)。
2. 调度器: 管理爬虫的任务队列,控制爬取流程和顺序。
3. 分布式爬虫: 将爬虫任务分散到多个节点或机器上,提高效率、速度和容错性。
4. 部署: 将爬虫系统部署到生产环境中运行。
十、并发异步爬虫
- aiohttp: 基于 asyncio 的异步 HTTP 请求库,构建高性能、可伸缩的 Web 服务和应用。
- asyncio: Python 标准库,提供对异步编程的支持 (异步 I/O、协程和任务)。
十一、高级爬虫技术
- IP 代理: 隐藏真实 IP 地址,绕过访问限制,提高爬取速度和匿名性。
- 验证码识别: 使用图像处理、机器学习或深度学习技术 (如 CNN) 自动识别和破解验证码。
- APP 抓取: 模拟移动应用的请求和交互获取数据 (使用 Charles、Fiddler 等抓包工具)。
- 增量式爬虫: 只爬取自上次爬取以来有更新的数据,提高效率。
十二、反爬虫技术
- 请求头限制: 限制或检查 HTTP 请求的头部信息 (User-Agent, Referer 等)。
- 验证码: 识别用户是否为人类的机制。
- 黑白名单: 控制访问,阻止或允许特定用户或 IP 地址访问网站。
- 封禁 IP: 根据恶意行为封禁特定 IP 地址。
- 数据加密: 将数据转换为不可读的形式。
- 数据混淆: 改变数据的格式或结构,使其难以理解或解析。
- 行为分析: 监控和分析用户或爬虫的行为,检测异常活动。