python进阶之Fraction,pil,Counter,BytesIO,eval妙用......

Python进阶技巧:Fraction, PIL, Counter与BytesIO应用
本文介绍了在处理微博汉字点选验证时使用的一些Python进阶技术,包括PIL库的图片处理,使用Fraction库实现精确缩放,利用BytesIO处理内存中的图片,以及注意eval的巧妙运用。还提到了如何在等待元素可点击时避免大量条件判断,以及Counter模块在计数和操作字典方面的便利性。

最近在处理微博的汉字点选验证遇到一些问题,用了之前没用过的包,此处算是记录。另外今后不再写爬虫详细的过程只对新技术做笔记
一PIL也就是pillow 图片处理

#导包
from PIL import Image
#open打开文件返回一个携带通道和size的Image对象
#win上要注意路径后缀,当然写好的绝对路径函数另一说
img=Image.open("G:\spider\platform_demo\\1.png","r")#<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=515x692 at 0x271D3DBE588>
print(im.size,im.format,im.mode,im.format)#对像包含图片的size:宽高,mode:颜色的通道'L'(luminance)表示灰度图像,'RGB'表示真彩图像,'CMYK'表示预先压缩的图像,format返回文件的类型比如png。这个不细说
im.show()#在对图片处理,展示图片
im.save(self, fp, format=None, **params)#存储图片对象,fp:存储的位置,format:保存的文件格式
by_arry = BytesIO()
sad.save(by_arry, format='PNG')#也可以这样写不用写路径了,代码中可以直接使用这个对象

#缩放图,第二个是采样
thumbnail(size,resample=BICUBIC)(创建缩略图)只能缩小,直接改变,按比例缩小
img.resize(size, resample=NEAREST, box=None)可放大可缩小,不改变对象返回新的对象,直接按size缩小

#截图
crop(box)#剪矩形区域的左上角x,y坐标,右下角的x,y坐标,规定图像的最左上角的坐标为原点(0,0),宽度的方向为x轴,高度的方向为y轴,每一个像素代表一个坐标单位
实际用法:#j截取的顺序是固定的,这是验证码的一部分
left,top,right,bottom =int(locations['x'])+10, int(locations['y']), int((locations['x'] + sizes['width']))+10,int((locations['y'] + sizes['height']))
img=screent.crop((left,top,right,bottom))

#旋转图片,某种情况下的验证码是可以用到的
transpose(method)(图像翻转或者旋转)
im.transpose(Image.ROTATE_180)
    - Image.FLIP_LEFT_RIGHT,表示将图像左右翻转
    - Image.FLIP_TOP_BOTTOM,表示将图像上下翻转
    - Image.ROTATE_90,表示将图像逆时针旋转90°
    - Image.ROTATE_180,表示将图像逆时针旋转180°
    - Image.ROTATE_270,表示将图像逆时针旋转270°
    - Image.TRANSPOSE,表示将图像进行转置(相当于顺时针旋转90°)
    - Image.TRANSVERSE,表示将图像进行转置,再水平翻转
 
past
在使用 RagFlow 上传文件时遇到报错,可能由多种原因引起。以下是针对不同错误的解决方案: 1. **解析 PDF 文件时报错:`Internal server error while chunking: Coordinate lower is less than upper`** - 此问题通常发生在文档分片过程中,可能是由于文本块大小设置不当导致的。尝试将“建议文本块大小”数值(默认为512)调小,例如调整为300,这可以解决部分PDF无法解析的问题 [^1]。 2. **出现 `Resource punkt_tab not found` 错误** - 这个错误通常与 NLTK 的 `punkt_tab` 资源缺失有关。可以通过以下方式解决: - 访问 [NLTK DATA 官网](https://www.nltk.org/nltk_data/) 下载 `punkt_tab` 工具包。 - 在本地路径中创建 `tokenizers` 文件夹,并将下载好的 `punkt_tab` 包放入其中。 - 确保该路径在 NLTK 查找资源时能够被正确遍历到 [^2]。 3. **上传文件解析卡住或失败,提示 `InfinityException: (3024, “Column: authors_tks doesn’t exist@src/storage/meta/entry/table_entry.cpp:1292”)`** - 错误表明目标表中缺少列 `authors_tks`,需要检查数据库结构是否匹配当前版本的要求。确保数据库表结构已更新以包含所需的列。如果使用的是自定义数据库,请手动添加相应的列以避免此类异常 [^3]。 4. **MinIO 上传配置中字符编码问题** - 如果在 MinIO 上传过程中遇到字符编码问题,可以在 `put_object` 方法中使用 `errors="replace"` 参数来替换无法解码的字符: ```python minio_client.put_object( bucket_name=output_bucket, object_name=chunk_id, data=BytesIO(content.encode("utf-8", errors="replace")), length=len(content.encode("utf-8", errors="replace")), ) ``` 这样可以防止因特殊字符导致上传失败 [^4]。 5. **WSL 内存不足导致的离线部署问题** - 如果在 WSL 上运行 RagFlow 并遇到内存不足的问题,可以通过修改 `.wslconfig` 文件来增加分配给 WSL 的内存和处理器数量: ```ini [wsl2] memory=30GB processors=16 ``` 将此文件保存在用户目录下(`C:\Users\Administrator`),以提升系统资源利用率 [^5]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值