ECommerceCrawlers项目分析(十二)
2021SC@SDUSC
本篇文章将对dazhong.py的_get_font_dict_by_offset核心函数进行分析
在本项目中,一个文字有一个标签,相同字体有相同的标签,一个标签对应一对xy坐标
因此通过获取xy坐标来获取文字。
完整代码如下:
def _get_font_dict_by_offset(self, url):"""获取坐标偏移的文字字典, 会有最少两种形式的svg文件(目前只遇到两种)"""res = requests.get(url,timeout=60)# res.text 之时,Requests 会使用其推测的文本编码。html = res.textfont_dict = {}# 正则表达式re.findall,返回string中所有与pattern匹配的全部字符串,返回形式为数组。y_list = re.findall(r'd="M0 (\d+?) ', html)# 如果y_list不为空,即找到了符合的字符串if y_list:font_list = re.findall(r'<textPath .*?>(.*?)<', html)# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,# 一般用在 for 循环当中。for i, string in enumerate(font_list):# 记录下y坐标y_offset = self.start_y - int(y_list[i])sub_font_dict = {}for j, font in enumerate(string):# 记录下x坐标x_offset = -j * self.font_sizesub_font_dict[x_offset] = fontfont_dict[y_offset] = sub_font_dict# 没找到符合的字符串的情况else:font_list = re.findall(r'<text.*?y="(.*?)">(.*?)<', html)for y, string in font_list:y_offset = self.start_y - int(y)sub_font_dict = {}for j, font in enumerate(string):x_offset = -j * self.font_sizesub_font_dict[x_offset] = fontfont_dict[y_offset] = sub_font_dictprint('字体字典',font_dict)return font_dict
首先,通过正则表达式获取对应的css样式
res = requests.get(url,timeout=60)# res.text 之时,Requests 会使用其推测的文本编码。html = res.textfont_dict = {}# 正则表达式re.findall,返回string中所有与pattern匹配的全部字符串,返回形式为数组。y_list = re.findall(r'd="M0 (\d+?) ', html)
如果存在,则进入if语句,如果不存在则进入else语句。
if,else语句里的代码块内容相似,它们都实现了相同的功能:得到与文字相关的xy坐标
font_list = re.findall(r'<textPath .*?>(.*?)<', html)# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,# 一般用在 for 循环当中。for i, string in enumerate(font_list):# 记录下y坐标y_offset = self.start_y - int(y_list[i])sub_font_dict = {}for j, font in enumerate(string):# 记录下x坐标x_offset = -j * self.font_sizesub_font_dict[x_offset] = fontfont_dict[y_offset] = sub_font_dict
这里给出svg样例来进行说明
svg内容样例`<text x="0" y="46">历分爆</text>````
<text x="0" y="46">历分爆锅父碰茅恐寸矮异唐险乓绢梢菊装罗拘欲则悲鹊北奉慕袄限洞都凶千密暮达快容糖秧澡私</text>
<text x="0" y="85">扔品惕倦南观只死夺刊浑糠扭康淡蛛妄冶夫捡喷脚情项遵发滋铜灌锣垫盲极歉事讲腰押穿果或廉</text>
<text x="0" y="129">趁鼓鸽幼翅脖尼畅抽遗绸删被海乞肺识垄素湾齐室梦姑善朗皮乒助摄办长令胜炼搂陡漫场浪般价</text>
<text x="0" y="169">兔朱肝朽踪骡弓帝人腐津代典志解责博建酬阳出技必诗救窑摘堤扁峰焰虏孩骑御愉爸敌阀顿仇于</text>
<text x="0" y="218">挂遍等纷壮隶非猾匹会载岸萄置缎姜星龙珍深许构违势医夹首卜汁把嘱顶拿痛翁狱样枝销疑崇泻</text>
<text x="0" y="259">伞追困到惜系伍奔贸野云蛇炮虫童供内猜忍轿沙布执挑如得呀境祸岗饮又乡灿搜扣脂遇中乙迈缺</text>
<text x="0" y="307">沟勺瓶毛岂宙汉奏愈返们姿化普压连宾货截您唇璃兰雨染墨恢棕植灰垮茶右敞为太杰隙香雹将呆</text>
<text x="0" y="350">稳柄劳督仰股轧扎崖我悼影饱专药给职逮剃耽骗拳尘提摧践瑞谈饺杨渔占孝亭林娃晃鄙临央催箱</text>
它先记录下y坐标,然后对子串再进行分解,通过计算生成新的x坐标。以x坐标为索引,重新构建子串。然后再以相应的y坐标为索引,子串整体作为一个元素。
ECommerceCrawlers项目分析(十二)相关推荐
- 2021年大数据Kafka(十二):❤️Kafka配额限速机制❤️
全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka配额限速机制 限制producer端的速率 限制c ...
- 2021年大数据HBase(十二):Apache Phoenix 二级索引
全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Apache Phoenix 二级索引 一.索引分类 ...
- 2021年大数据Hive(十二):Hive综合案例!!!
全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...
- 2021年大数据Hadoop(二十二):MapReduce的自定义分组
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...
- 敏捷宣言遵循的十二条原则
敏捷宣言遵循的十二条原则Twelve Principles behind the Agile Manifesto 我们遵循以下原则: We follow these principles: 我们最重要 ...
- maya批量命名插件_教你玩转MAYA的四十二精华造诣(第一期)
最近在整理文档时发现我收藏了一篇关于MAYA应用技巧的文章,突然有兴趣看了看,结果发现老版本MAYA中的某些内容很多已经无法应用于新版本.我又上网查了一下,结果发现网上好多帖子和我收藏的这篇内容基本一 ...
- C++语言学习(十二)——C++语言常见函数调用约定
C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...
- 第十二周-学习进度条
第十二周 所花时间(包括上课) 20h 代码量(行) 230 博客园(篇) 2 了解到的知识点 fragment的相关知识 转载于:https://www.cnblogs.com/liujinxi ...
- axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- stm32l0的停止模式怎么唤醒_探索者 STM32F407 开发板资料连载第二十二章 待机唤醒实验
1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第二十二章 待机唤醒实 ...
最新文章
- Python数据分析可以应用到哪些领域
- 【渝粤教育】国家开放大学2018年春季 0177-21T电机学(二) 参考试题
- 回溯算法之幸运的袋子
- JVM—引用计数和可达性分析算法(存活性判断)
- 推荐95个极富创意的单页网站设计实例欣赏
- fedora中linux改成英文,Fedora的英文界面下使用中文
- Flink时间属性和窗口
- 解决向github提交代码不用输入帐号密码
- Mybatis事务失效bug
- 为羊哥点赞,利用云服务器搭建私人云笔记
- 百度有啊前端技术初窥
- 分布式算法 Paxos 的直观解释 (TL;DR)
- MC(monitorcat) 监控军刀
- IOS天气预报(美化)
- 打造自己个性的notepad ++
- 从NVIDIA官方网站上下载CUDA的方法
- 半导体无尘车间测试尘埃粒子浓度等级设备
- Anchor-free的目标检测文章
- ArcGIS Earth 1.11版本发布啦!
- 从2345离职的原因
热门文章
- 马哥linux docker视频,[其他] 马哥Docker + K8S 视频教程
- 4月13日调整人人商城小程序用户登录灰头像,getUserProfile小程序登录接口适配比较简单的方法
- 人人商城删除后台菜单“小程序”
- cad迷你画图 mac
- Anaconda 更新pip版本
- 6000件数字藏品上线秒空!“国宝级”数字藏品长这样
- 室内设计——别墅设计方案(包含预览图jpg和.psd文件)
- 关于si4438以往犯的一些错误
- 第 25 章 基于小波变换的数字水印技术
- C#使用NOPI导入Excel