嘘~ 正在从服务器偷取页面 . . .

疑难记录贴


记录一些奇怪的问题 希望可以帮助到更多人

Python 内存溢出

  • Python 版本 3.8.9
  • FastApi中增加playwright 后内存几秒增加1M 并且不进行释放
  • 通过tracemalloc模块定位到
    • Programs\Python\Python39\lib\json\decoder.py:353: size=344 KiB, count=932, average=377 B
    • 执行 10 个小时左右内存达到 100% 进程被杀死

解决

  • 检查了全局对象 发现并没有重复引用
  • 然后更新了Python版本为3.9.13 之后 问题解决 内存虽然会高 但会自动回收

Pycharm 导包异常

  • 在安装redis 并且导包 from redis import asyncio as redis_asyncio
  • pycharmasyncio 会报错 提示找不到 但是可以正常运行代码
  • 并且没有代码提示 (十分致命)

解决

  • 安装以下包即可 pip install types-redis

bytes 直接转图片对象

  • 有时候网页上获取到的图片就是bytes或者base64 如果需要本地打开那又要保存再打开
  • Image.open(io.BytesIO( 图片bytes )) 通过这个语句可以直接把图片bytes转为图片对象进行操作

svg 识别

  • 今天遇到一个网站 他的数值都是用 svg 画出来的 接口响应的也都是 path d值 只能想办法用ocr进行识别
import io

import ddddocr
from reportlab.graphics import renderPM
from svglib.svglib import svg2rlg

width = 68
height = 24
path_d = "M15.25 20.70L15.25 23.10L2.68 23.10L2.68 20.70L7.59 20.70L7.59 4.05L2.55 5.51L2.55 2.96L10.35 0.69L10.35"
svg_path = f'<svg width="{width}" height="{height}" xmlns="http://www.w3.org/2000/svg"><path d="{path_d}" stroke="#000"/></svg>'
drawing = svg2rlg(io.BytesIO(svg_path.encode('utf-8')))

img_bytes2 = renderPM.drawToString(drawing, fmt="PNG")

ocr = ddddocr.DdddOcr()
res = ocr.classification(img_bytes2)
print('识别出的: ' + res)

请求乱码 (GBK)

  • 遇到一个网站 发送的中文变成乱码
  • 复制curl也无法导入Apifox 研究了好久
    Charles显示
  • 但是在上面 可以看到是中文
    中文原码
  • 后面把CURL放到记事本里面 发现是GBK编码 一开始还以为是哪个JS加密了
  • client.post(url=url, data=urlencode(data, encoding='GBK'))
  • 需要用这种方式进行处理

文章作者: 林木木
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林木木 !
评论