自己网站制作主题猫-wordpress
news/
2025/9/24 8:26:24/
文章来源:
自己网站制作,主题猫-wordpress,常州设计网站,郑州网站关键词优化外包刚开始写文章还希望大家可以喜欢#xff0c;对于爬虫只是个人整理出的方法#xff0c;爬虫大牛请嘴下留情。“”仅限学术交流#xff0c;如有冒犯请联系作者删除“”话不多说#xff0c;想分析天津地区餐饮行业的大致情况#xff0c;要爬出#xff08;商铺名称#xff0…刚开始写文章还希望大家可以喜欢对于爬虫只是个人整理出的方法爬虫大牛请嘴下留情。“”仅限学术交流如有冒犯请联系作者删除“”话不多说想分析天津地区餐饮行业的大致情况要爬出商铺名称星级评价条数人均消费金额菜系商圈团购活动等。可是在爬虫时发现这些数字都是以这类方框形式展示再看源代码以#xXXXX这种形式展示这是反爬机制中的字体库反爬要把这些代码转化成前端看到的123或天津菜等数据。感觉跟特工密码一样真让人兴奋。要把这些代码对应出真正的数字或汉字需要把css内的woff字符库爬出来。获取的css链接类似如下http://s3plus.sankuai.com/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/9a2072f4d3d2589da1b348aebb034c6c.css在源代码中找到这样的内容爬取下来#爬取代码如下
patternre.compile(r//s3plus..*?.css)
urlpattern.findall(html)
url1.join(url)
cssurlhttp:url1css链接爬下来后打开看看里面的内容哇塞这是什么神仙结构可以看到里面有2种字符库。我之前遇到过里面有4种各不相同的字符库这里只有2种字符库简单多了但是css内的字体文件一直在变光抓下来一次woff文件是不够的既然这里实时变更就要采取爬虫实时抓取css、下载woff。先把第一次爬取出来的css文件中的woff文件下载下来上面截图看的出里面有2个woff文件是否要把所有的woff文件都下载下来呢这要看我们都需要爬取下来什么内容商铺名称星级评价条数人均消费金额菜系商圈团购活动这些内容看他们的class标签属于2类shopNum,tagname在css文件中能查到这2个标签分别对应一个woff文件也就是下载这2个woff文件即可。下载下载woff文件代码# 将css内对应shopNum,tagname标签的font-family内容爬取出来
def css_url(html):patternre.compile(r//s3plus..*?.css)urlpattern.findall(html)url1.join(url)cssurlhttp:url1frequests.get(cssurl)f.encodingutf-8f1f.textshopnumfontre.findall(rfont-face{font-family: PingFangSC-Regular-shopNum.*?shopNum{font-family: PingFangSC-Regular-shopNum;},f1)shopnum.join(shopnumfont)tagnamefontre.findall(rfont-face{font-family: PingFangSC-Regular-tagName.*?tagName{font-family: PingFangSC-Regular-tagName;},f1)tagname.join(tagnamefont)return shopnum,tagname
# 将对应标签内的woff下载在本地
def unicode_dict(shopnum):shopnumlist re.findall(r//s3plus.meituan.net/v1/w/font/w.woff,shopnum)shopnumurl http: .join(shopnumlist)response_shopnumwoff requests.get(shopnumurl).contentfontname shopnumurl[-13:-5]hopen(fontname .woff, wb)h.write(response_shopnumwoff)h.close()现在先以shopNum标签举例举一反三tagname也就知道怎么处理了。下面就是关键把爬取出来的一个woff文件做为基础字符库通过FontCreator可以把编码对应的数字或汉字显示出来下面是fontcreator打开woff文件后呈现出来的样子。但要把这些编码和对应汉字转换成.xls或.txt还需要一个图像文字识别软件推荐在线https://zhcn.109876543210.com/把fontcreator中内容截图下来用刚才的链接转换成.csv直接把代码和对应的汉字都下载下来方便直接生成字典这是我的方法可以根据自己的喜好来选择下载的形式这里的是不是unie045和#xe045很像只要把前面3个字符更换成uni就可以了测试一下是真的可以的。那把编码和汉字对应上形成字典再replace’uni’,’#x’就能把网页上的#xXXXX转换成汉字或数字了就能爬取下来正确的内容了。可这只能生成一个字典前面说过css内的woff是不断变换的每个woff文件下载下来相同数字对应的编码都不相同如图不可能每个woff文件都这样生成一个字典其他字符库要怎么找到编码对应的汉字或数字呢这里需要用到TTFontfrom fontTools.ttLib import TTFont把woff文件存为xml每个编码都会生成这样一个坐标系虽然编码不同但是后面的坐标系是相同的对应生成的数字或汉字也是相同的这是一个切入点~只要通过一个字符库的xml找到坐标系和汉字、数字对应的关系新爬下来的字符库转换成xml后遍历他的坐标系和已知字符库的坐标系对上了就把已知字符库的汉字或数字赋值给新的字符库完成上代码newfont TTFont(fontname .woff)
newfont.saveXML(fontname .xml)
basefont TTFont(1d7914a7.woff)
unicodedict {unie046: 跟, unif305: 块, unif230: 1, unie713: 2, unie86f: 3, unie5f3: 4,unif235: 5, unie7c3: 6, unif558: 7, unie383: 8, unif5f6: 9, unie8f4: 0,unieb6b: 店, unie015: 中, unif44f: 美, unif4fe: 家, unif5b5: 馆, unie6b4: 小,unif78b: 车, unie0a1: 大, unif191: 市, unie5eb: 公, unif33f: 酒,unif0a1: 行, unie19a: 国, unie075: 品, unie4d5: 发, unif2ed: 电, uniea88: 金,uniec19: 心, unie240: 业, unif77e: 商, unif87a: 司, unief51: 超, unie877: 生,uniebf3: 装, unied5e: 园, unie0c0: 场, unie723: 食, unif167: 有, uniec25: 新,unief2b: 限, unieb71: 天, unie36b: 面, unie4e5: 工, unie820: 服,unieb69: 海, unie591: 华, unif5ab: 水, unif653: 房, unie3d5: 饰, unif48e: 城,unif042: 乐, unie31f: 汽, unif76c: 香, unie056: 部, unie5b9: 利, unif860: 子,unie661: 老, unif316: 艺, unie714: 花, unif101: 专, uniedf8: 东, unie66e: 肉,unif6eb: 菜, unif897: 学, unif2a7: 福, unie148: 饭, unif313: 人,uniedf7: 百, unied1a: 餐, unif7be: 茶, unie32e: 务, unie63b: 通, unie45b: 味,unif397: 所, unieda8: H1, unie761: 区, unif6cf: 门, unie424: 药, uniedc9: 银,unif87c: 农, unie462: 龙, unie04a: 停, unie610: 尚, unif0ea: 安, unie913: 广,unie399: 鑫, uniebb2: —, unie04b: 容, unie21a: 动, unie225: 南,unif024: 具, unif165: 源, unie259: 兴, uniecb3: 鲜, unie4a3: 记, unif109: 时,unif4ed: 机, unie5c7: 烤, unif276: 文, unie538: 康, unied4c: 信, uniedca: 果,unif1d5: 阳, unif6f9: 理, unie83a: 锅, unif7e1: 宝, unif094: 达, unif18e: 地,....... } # 太长了做缩略全部代码后面会附上。
newfont_glyphNamesnewfont.getGlyphNames()[1:-1]
basefont_glyphNamesbasefont.getGlyphNames()[1:-1]
temp{}
alen(unicodedict)
for i in range(0,a):for j in range(0,a):if newfont[glyf][newfont_glyphNames[i]]basefont[glyf][basefont_glyphNames[j]]:temp[newfont_glyphNames[i].replace(uni,#x).lower()]unicodedict[basefont_glyphNames[j]]else:pass
return temp通过上面几步基本上就可以把爬取下来的字段对应出正常的汉字或数字了再保存到mysql中结果如下。整理思路1、 爬取出css链接从css内解析出shopNum,tagname标签的woof文件2、 将下载下来的一个woff文件做为基础用fontcreator和诚华OCR将编码对应的汉字和数字整理成字典。3、 将已知的字符库用TTFont存为xml,用getGlyphNames()和if条件语句判断新下载的字符库和已知字符库是否有相同的坐标系有的话将字典内的值赋给新的字符库的编码用replace‘uni’‘#x’将Unicode编码转换为网页上的编码形成新的字典。4、 通过以上方式生成2类字典shopNum字典和tagname字典。5、 将爬取出来的#xXXXX这个格式的内容区分匹配哪类字典再将字典的值赋给对应的编码形成最终的前端显示的文字或数字。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915329.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!