部分代码_爬虫系列|大众点评svg映射代码部分(三)

本文详细介绍了如何通过获取HTML、CSS和SVG映射表,利用正则表达式匹配和解析,实现SVG字符与汉字的对应。首先获取大众点评页面的HTML源码,然后提取CSS链接并解析坐标,接着解析SVG映射表获取汉字,最后通过坐标匹配到相应的汉字。此过程为将SVG内容应用到实际场景奠定了基础。
摘要由CSDN通过智能技术生成

爬虫系列|大众点评svg映射代码部分(三)

前言

前边两篇已经分别介绍了svg的原理以及点评网一些简单数据的获取,本篇主要介绍svg映射字符的获取与标签的对应。

原理

首先获取html源码、css源码、svg映射表,之后根据css源码里的坐标找到svg映射表内的文字,之后再放入对应的html源码中。

1b7547b208340f7a49cc1ff537b01230.png

过程

1.获取html源码

header={'Accept':'*/*','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36','Cookie':'填充你的cookie'}
url_all="http://www.dianping.com/shop/k2IIzyDKxTUsz0lX/review_all"resp=requests.get(url_all,headers=header)
with open('dianping.html',mode='w',encoding='utf-8') as f:
   f.write(resp.text)

获取到如下内容

0fb3485d65f415208aec189bbd5daaf5.png

2.获取css内容

使用正则表达式匹配html源码中的css链接

css_url=re.findall(' ',resp.text)
css_url='http:'+css_url[0]
css_resp=requests.get(css_url)
with open('css样式.css','w',encoding='utf-8') as f:
   f.write(css_resp.text)
   #print(css_resp.text)

获取到的坐标

ad0c1a0c0646a948de541eb966a6a249.png

3.获取SVG映射表

在获取到的css中匹配svg映射表

##因为链接经常变化所以用.*?svg_url=re.findall('svgmtsi\[class\^="rp"\].*?background-image: url\((.*?)\);',css_resp.text)
svg_url="http:"+svg_url[0]
svg_resp=requests.get(svg_url)
with open('svg映射.svg','w',encoding='utf-8') as f:
   f.write(svg_resp.text)
print(svg_url)

371f1503f6c840f4e9704c8e8630042b.png

4.获取映射表内的相应汉字

import parselimport rewith open('svg映射.svg',mode='r',encoding='utf-8') as f:
   svg_html=f.read()
sel=parsel.Selector(svg_html)
texts=sel.css('text')
lines=[]##加载映射规则表

for text in texts:

##获取映射表中的y属性以及text标签内的内容

   lines.append([text.css("text::attr(y)").get(),#可以在此处变成inttext.css("text::text").get()])##获取所有类名和位置with open('css样式.css',mode='r',encoding='utf-8') as f:
   css_html=f.read()

##通过正则匹配出css中的坐标

class_map=re.findall('\.(rp\w+)\{background:-(\d+)\.0px -(\d+)\.0px;\}',css_html)

class_map=[(class_name,int(x),int(y)) for class_name,x,y in class_map]print(class_map)#获取类名和汉字对应关系for one_char in class_map:
   cls_name,x,y=one_char    get_col=""    for line in lines:if y<int(line[0]):            get_col=[one for one in line[1]]breakprint((cls_name,get_col[int(x/14)]))

运行结果

eaa7c2627adfa4cd5c42369ae13c7e17.png

从图中可以看出已经获取到类相对性的汉字,之后需要做的工作就是将这些对象的汉字对应到html中。

总结

本篇主要涉及对应的svg内容的匹配,可以实现标签与汉字的匹配。下一篇关于该系列的文章,就是将该部分内容放入实战中。

参考

1.小张python(简书)

https://www.jianshu.com/p/930076792542

2.松鼠爱吃饼干(哔哩哔哩)

https://b23.tv/V7ChG9

fb7ae387e671c3002672c7b20c716bfb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值