-
Python爬虫项目上线后,多数问题不是出在代码语法上,而是集中在请求行为、反爬应对、数据提取和运行稳定性这几个环节。下面整理高频问题及对应解决思路,不讲理论,只说实际踩过的坑和怎么绕过去。请求被拒绝:403、406、ConnectionResetError网站返回403或直接断连,大概率是请求头缺失或特征太“机器人”。Requests默认的User-Agent是python-requests/2.x,几乎等于举手说自己是爬虫。加真实浏览器的User-Agent(比如Chr
-
应使用单个aiohttp.ClientSession实例配合asyncio.Semaphore限流并发,并显式配置ClientTimeout,避免重复创建session、未await响应方法及无超时导致卡死。
-
f-string是推荐的格式化方法,其语法简洁高效,如print(f"我的名字是{name},今年{age}岁。");str.format()通过占位符和参数传递实现,如print("我的名字是{},今年{}岁。".format(name,age));%格式化采用类似C语言的风格,如print("我的名字是%s,今年%d岁。"%(name,age)),但已逐渐被取代。
-
Python列表核心原理是动态数组实现、引用存储机制、可变对象特性;底层为连续内存的动态数组,扩容有代价;存储对象引用而非值本身;作为可变对象,函数传参默认传引用。
-
typing.Protocol是Python3.8+中用于定义鸭子类型接口的结构化类型检查机制,不需继承或注册,仅要求实现指定方法和属性签名,运行时无开销,仅被静态检查工具(如mypy)识别,isinstance检查始终返回False。
-
asyncio.run()报RuntimeError是因它自动创建并关闭事件循环,不可重复调用;Jupyter中应直接await,子线程需手动新建loop;ThreadPoolExecutor需用上下文管理器或显式shutdown;multiprocessing.PicklingError源于函数不可序列化;gather与wait在错误处理和返回结构上差异显著。
-
当数组含冗余长度为1的维度且不确定具体位置时,应优先用np.squeeze()而非手动索引;它安全删除所有或指定axis上的1维,避免硬编码错误,但需注意不可逆性及跨框架差异。
-
装了django-cors-headers仍报“No'Access-Control-Allow-Origin'header”是因为CorsMiddleware位置错误(须在SessionMiddleware之后、CommonMiddleware之前)、CORS_ALLOW_ALL_ORIGINS=True未正确配置(旧版CORS_ORIGIN_ALLOW_ALL已弃用),或未设CORS_ALLOW_CREDENTIALS=True(前端带cookie时必需)。
-
Python注释用于解释代码且不被执行,主要分为两种:1.单行注释用#开头,适用于简短说明,可置于代码后或独立成行;2.多行注释用'''或"""包裹,虽为字符串但未赋值时被忽略,常用于函数或模块的文档说明,并可通过.__doc__访问。
-
RESTfulAPI设计需平衡理论与实践,核心是资源抽象与标准操作,FastAPI和DRF分别以异步性能和Django集成优势支持高效开发;通过数据模型定义、端点规划实现接口结构化,遵循无状态原则确保可扩展性。为保障数据一致性,需结合数据库事务与幂等性设计,避免并发冲突;安全性方面,采用JWT或OAuth2实现认证,基于角色的权限控制配合HTTPS、输入验证、速率限制和敏感数据保护构建多层防护。版本管理推荐URL路径化(如/v1/users),直观易维护,DRF支持Accept头或查询参数版本控制但复杂度
-
pandas批量数据合并核心是统一列名、对齐索引、选对方式:一、用glob自动读取多CSV再concat纵向堆叠;二、用merge按字段关联,注意on/how参数及ID类型一致;三、多表用reduce链式merge;四、合并前必查类型、去空格大小写、去重。
-
量化交易与目标检测属不同领域:前者处理时序数据,后者处理图像数据;二者仅在图表识别、另类数据解析等边缘场景有谨慎交叉。
-
print是临时调试手段,logging是可配置、可持久、可分级的正式日志工具;核心区别在于输出目标、级别控制、格式化能力及生产环境适应性。
-
可以使用haversine公式或geopy库计算两地间的大圆距离。1.手动实现haversine公式,通过经纬度转弧度、计算球面差值与地球半径乘积得距离;2.推荐使用geopy库的geodesic方法,基于WGS-84椭球模型更精确;3.注意坐标顺序为(纬度,经度),避免颠倒,且长距离需考虑地球曲率,单位可选千米、米或英里。
-
args接收任意位置参数并打包为tuple,kwargs接收任意关键字参数并打包为dict;二者顺序固定为必选参数→args→kwargs,且支持解包调用。