爬虫系列|大众点评svg映射代码部分(三)
前言
前边两篇已经分别介绍了svg的原理以及点评网一些简单数据的获取,本篇主要介绍svg映射字符的获取与标签的对应。
原理
首先获取html源码、css源码、svg映射表,之后根据css源码里的坐标找到svg映射表内的文字,之后再放入对应的html源码中。
过程
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)
获取到如下内容
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)
获取到的坐标
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)
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)]))
运行结果
从图中可以看出已经获取到类相对性的汉字,之后需要做的工作就是将这些对象的汉字对应到html中。
总结
本篇主要涉及对应的svg内容的匹配,可以实现标签与汉字的匹配。下一篇关于该系列的文章,就是将该部分内容放入实战中。
参考
1.小张python(简书)
https://www.jianshu.com/p/930076792542
2.松鼠爱吃饼干(哔哩哔哩)
https://b23.tv/V7ChG9