新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python 爬虫项目:基础模块综合实战与项目规范

发布时间:2026/9/2 3:12:58来源:尧图网络
Python 爬虫项目:基础模块综合实战与项目规范
前言经过前面章节学习我们已掌握环境配置、requests库使用、GET/POST 请求、请求头伪装、网页编码处理五大核心基础能力。本章不再单独讲解新语法而是将所有知识点融会贯通通过综合实战项目、通用代码模板、全场景排错手册、开发规范四大板块把零散知识点落地为可直接用于生产的爬虫代码。同时梳理基础爬虫常见坑点、优化技巧帮助你完成从 “会写代码” 到 “会做项目” 的过渡。本章参考链接requests 完整 API 文档https://docs.python-requests.org/HTTP 状态码速查https://httpstatuses.com/编码识别工具https://chardet.readthedocs.io/一、通用标准爬虫模板可直接复用整合会话对象、UA 轮换、完整请求头、随机延时、自动编码探测、异常捕获打造通用基础爬虫模板适用于 90% 以上静态网页、公开接口采集场景。1.1 完整版通用模板python运行import requests import random import time import chardet from requests.exceptions import RequestException, Timeout, ConnectionError # 全局配置区按需修改 # UA池可自行扩充 UA_POOL [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0 Safari/537.36, Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edg/126.0.0.0 Safari/537.36, Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) Safari/605.1.15 ] # 基础请求头固定字段 BASE_HEADERS { Referer: , Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9, Accept-Encoding: gzip, deflate, br, Cache-Control: max-age0, Upgrade-Insecure-Requests: 1 } # 请求超时时间 TIMEOUT 8 # 随机延时区间单位秒 SLEEP_MIN 1 SLEEP_MAX 3 # # 创建全局会话对象 session requests.Session() def get_random_ua() - str: 随机获取UA return random.choice(UA_POOL) def get_page_html(url: str) - str: 通用网页请求函数 :param url: 目标网址 :return: 解码后的网页源码失败返回空字符串 # 拼接当前请求头 current_headers BASE_HEADERS.copy() current_headers[User-Agent] get_random_ua() session.headers current_headers try: # 发起请求 resp session.get(url, timeoutTIMEOUT) resp.raise_for_status() # 主动抛出4xx/5xx异常 # 自动探测编码并解码 detect_result chardet.detect(resp.content) charset detect_result.get(encoding, utf-8) html resp.content.decode(charset, errorsignore) return html except Timeout: print(f【异常】{url} 请求超时) except ConnectionError: print(f【异常】{url} 网络连接失败) except RequestException as e: print(f【异常】{url} 未知请求错误{str(e)}) return def close_session(): 关闭会话释放资源 session.close() if __name__ __main__: # 待采集网址列表 target_urls [ https://httpbin.org/get, https://httpbin.org/headers, https://httpbin.org/cookies ] for idx, url in enumerate(target_urls, 1): print(f\n 开始采集第{idx}个页面{url} ) page_content get_page_html(url) if page_content: print(页面片段内容, page_content[:300]) # 随机延时 time.sleep(random.uniform(SLEEP_MIN, SLEEP_MAX)) close_session() print(\n 全部采集任务执行完成 )1.2 模板使用说明配置区修改仅需修改UA_POOL、Referer、目标 URL 列表即可快速适配新站点核心能力自动换 UA、完整请求头伪装、随机延时、自动编码、全类型异常捕获适用场景新闻列表、资讯站点、文档页面、公开接口等静态资源采集。二、实战案例 1模拟登录 数据采集POSTSession 综合结合 POST 表单提交、Session 会话、Cookie 保持、请求伪装实现账号登录后采集专属页面是爬虫高频业务场景。python运行import requests import random import time from requests.exceptions import RequestException # 全局配置 UA_POOL [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0 Safari/537.36 ] HEADERS { Referer: https://httpbin.org/, Accept-Language: zh-CN,zh;q0.9 } TIMEOUT 6 # 登录信息 LOGIN_URL https://httpbin.org/post LOGIN_DATA { username: test_spider, password: 123456abc } # 登录后访问的页面 INDEX_URL https://httpbin.org/cookies def login_and_crawl(): session requests.Session() headers HEADERS.copy() headers[User-Agent] random.choice(UA_POOL) session.headers headers try: # 第一步POST登录 print(正在执行登录请求...) login_resp session.post(LOGIN_URL, dataLOGIN_DATA, timeoutTIMEOUT) login_resp.raise_for_status() print(登录成功返回数据, login_resp.text[:200]) time.sleep(random.uniform(1, 2)) # 第二步登录态访问页面 print(\n正在访问个人页面...) index_resp session.get(INDEX_URL, timeoutTIMEOUT) index_resp.raise_for_status() print(页面数据, index_resp.text) except RequestException as e: print(f任务失败{str(e)}) finally: session.close() if __name__ __main__: login_and_crawl()案例要点登录使用POST data表单传参符合传统网页登录逻辑Session自动保存登录 Cookie全程维持登录状态分步请求 延时模拟真人操作行为。三、实战案例 2文件资源下载二进制流处理整合 GET 请求、流式下载、请求伪装实现大文件 / 图片批量下载严格区分二进制数据与文本数据处理逻辑。python运行import requests import random import time UA Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0 Safari/537.36 HEADERS {User-Agent: UA} TIMEOUT 15 # 图片地址与保存名称映射 img_list [ (https://httpbin.org/image/jpeg, pic1.jpg), (https://httpbin.org/image/png, pic2.png) ] def download_file(url, save_name): try: # 开启流式下载降低内存占用 resp requests.get(url, headersHEADERS, streamTrue, timeoutTIMEOUT) resp.raise_for_status() # 二进制模式写入文件不做任何解码 with open(save_name, wb) as f: for chunk in resp.iter_content(chunk_size1024): if chunk: f.write(chunk) print(f【成功】{save_name} 下载完成) except Exception as e: print(f【失败】{save_name} 下载异常{str(e)}) if __name__ __main__: for url, name in img_list: download_file(url, name) time.sleep(2) print(所有文件下载完毕)四、基础爬虫全场景排错手册汇总前面所有章节的高频报错、现象、原因与解决方案作为开发常备查阅清单。4.1 状态码类问题表格状态码现象解决方案403 Forbidden拒绝访问1. 替换默认 UA2. 补充 Referer3. 增加请求延时4. 复刻完整浏览器请求头404 Not Found页面不存在核对 URL 地址、检查接口路径、判断页面是否已删除301/302 重定向页面跳转关闭allow_redirectsFalse手动处理或直接使用默认自动跳转500/502/503服务器错误稍后重试、增加延时、检查接口参数格式4.2 编码乱码类问题中文变成????/□□□网页为 GBK/GB2312手动指定resp.encodinggbk或content.decode(gbk)自动编码为ISO-8859-1响应头 / HTML 无编码声明使用chardet自动探测解码抛出UnicodeDecodeError解码时添加errorsignore忽略非法字符。4.3 请求异常类问题Timeout 请求超时延长timeout时间、检查本地网络、更换 IP 重试ConnectionError 连接失败域名错误、网站宕机、IP 被封禁SSLError 证书错误请求添加参数verifyFalse关闭 HTTPS 证书校验。4.4 POST 传参类问题参数提交后服务器接收为空分清data表单和jsonJSON 接口不可混用登录请求失败核对字段名、补充 Referer、使用 Session 携带前置 Cookie。五、爬虫开发代码规范基础阶段强制遵守规范代码可以降低出错概率、提升可读性适合个人开发与团队协作。请求规范所有请求必须设置timeout防止程序永久阻塞正式项目禁止使用 requests 默认 UA必须配置浏览器 UA高频采集务必添加随机延时拒绝毫秒级连续请求。编码规范静态网页优先手动指定编码未知编码使用chardet探测图片、视频等二进制资源永远使用resp.content不执行 decode异常规范循环采集、批量任务必须添加异常捕获单条失败不影响整体优先捕获具体异常Timeout、ConnectionError最后用通用异常兜底。资源规范使用Session会话时程序结束务必执行close()释放网络连接文件读写统一使用with语句自动关闭文件句柄。六、本阶段学习总结与后续学习方向6.1 基础阶段知识复盘至此Python 基础爬虫全系列内容正式完结你已掌握完整基础技术栈环境搭建Python pip 库安装、镜像源配置核心工具requests库全用法GET/POST、Session、文件下载、流式请求协议知识HTTP 基础、请求头、状态码、幂等性反爬基础UA 伪装、Referer、Cookie、行为模拟数据处理网页编码、乱码修复、自动编码探测工程能力异常处理、代码模板、项目规范、排错思路。基于以上内容你可以独立完成普通静态网页采集、表单登录爬虫、图片 / 文件下载、公开 API 接口数据获取等常规任务。6.2 进阶学习路线下一阶段推荐内容基础学完后可按照以下路线持续深耕爬虫技术网页解析BeautifulSoup、XPath、CSS 选择器提取网页指定文本、链接、图片地址动态网页爬虫Selenium、Playwright解决 JS 动态渲染、Ajax 加载页面进阶反爬绕过代理 IP、Cookie 池、验证码识别、JS 逆向框架实战Scrapy 分布式爬虫、Scrapy-Redis数据存储MySQL、MongoDB、CSV/Excel 数据持久化。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

西门子S7-1200/1500 PLC MODBUS TCP通信配置与排错实战 2026/9/2 9:18:54

西门子S7-1200/1500 PLC MODBUS TCP通信配置与排错实战

在工业自动化项目中,PLC与各类仪表、传感器、执行器之间的稳定通信是项目成功的基石。许多工程师在初次接触西门子S7-1200/1500系列PLC的MODBUS TCP通信时,常常被 MODBUS_COMM_LOAD 指令的配置细节所困扰,导致通信建立失败,影响…

阅读更多 →
AI工程化实战:构建安全可控的Harness执行环境 2026/9/2 9:18:54

AI工程化实战:构建安全可控的Harness执行环境

简介:本资源是一套面向工程师、AI研究者与技术负责人的实战型Harness工程入门教程,专为解决AI编程助手“聪明却不靠谱”的核心痛点而设计——模型常跳步、绕过测试、虚假完成任务。教程系统构建包含指令、状态、验证、范围与会话生命周期的5大子系统&…

阅读更多 →
多技术栈环境判断与配置管理工程实践指南 2026/9/2 9:18:54

多技术栈环境判断与配置管理工程实践指南

在实际开发中,我们经常会遇到需要判断当前代码运行环境的需求。例如,一个应用可能需要区分是在开发者的本地IDE中调试,还是在测试服务器、预发布环境或生产服务器上运行,以便动态加载不同的配置文件、开启调试日志或切换数据源。然…

阅读更多 →
玄武架构不是画连线:系统稳定性靠壳与蛇的配合 2026/9/2 9:18:54

玄武架构不是画连线:系统稳定性靠壳与蛇的配合

很多人看到“玄武架构”四个字,第一反应是去找拓扑图:节点、连线、标注,好像只要把服务之间用线段连起来,架构就已经清楚了。实际上,这正是最容易误读的地方。玄武架构不是“线段连接”的升级画法,它真正要…

阅读更多 →
cps_16dot0摩托罗拉写频软件深度解析与实战指南 2026/9/2 9:18:54

cps_16dot0摩托罗拉写频软件深度解析与实战指南

简介:摩托罗拉CPS_16.0写频软件是面向对讲机运维人员、无线电通信技术人员及行业用户的专业编程工具,专用于摩托罗拉车载台及兼容机型(如3688对讲机)的频率配置与参数优化,解决现场快速部署、信道管理、加密设置及电源…

阅读更多 →
构建高性能Java问答社区:从领域模型到Feed流与排名算法实战 2026/9/2 9:15:48

构建高性能Java问答社区:从领域模型到Feed流与排名算法实战

简介:这是一套面向具备Java Web开发基础的中高级学习者与项目实践者的高仿知乎功能论坛源码,聚焦问答社区核心场景,涵盖用户注册登录、文章/视频/想法发布、提问回答及互动评论等完整业务流程。资源包共441个文件,含53个Java源文件…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞