python爬虫进阶-SVG映射反爬虫
·
目的
破解SVG加密的字符,得到正确的字符
练习平台
http://www.porters.vip/confusion/food.html
思路解析
一、SVG的具体表现

二、CSS文件

三、svg


四、举例详解
这里选择图一为例:
已知:
类名:vhkjj4
坐标:(-316px -141px)----取正整数则为(316,141)


可以自行选择其他类名进行尝试
源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : jia666
# @Time : 2020/10/19 15:58
import re
import requests
class SVG_num():
def __init__(self, name):
self.class_name = name
self.main()
def main(self):
self.Get_file() # 获取css与svg文件
self.init_svg() # svg解析
self.svg_parse() # svg映射
def Get_file(self):
svg_link = "http://www.porters.vip/confusion/font/food.svg" # svg链接
css_link = "http://www.porters.vip/confusion/css/food.css" # css链接
# 获取svg与css文件内容
self.svg_text = requests.get(svg_link).text
css_text = requests.get(css_link).text
self.css_text = css_text.replace('\n', '').replace(' ', '') # 将换行符与空格清除,方便下一步匹配
# 定义一个函数用于匹配class属性为xx对应的css参数
def find_xy(self, in_text, class_value):
re_sentence = '.%s{background:-(\d+)px-(\d+)px;}' % class_value
pattern = re.compile(re_sentence)
res = pattern.findall(in_text)
return res[0]
# 寻找出svg文件中定义的字符大小
def find_font_size(self,in_text):
fs = re.compile(r'font-size:(\d+)px')
res = fs.findall(in_text)
return int(res[0])
def init_svg(self):
text = re.findall('y="(.*?)">(.*?)</text>', self.svg_text, re.S)
self.list_y = []
self.list_text = []
for i in range(len(text)):
self.list_y.append(text[i][0])
self.list_text.append(text[i][1])
def svg_parse(self):
x, y = self.find_xy(self.css_text, self.class_name) # 找出class=vhkjj4的xy坐标
real_y = [i for i in self.list_y if y <= i][-1] # 找出是哪一个 y
real_text = self.list_text[self.list_y.index(real_y)] # 找出是那个一 text
index = int(int(x) / 14) # 取整数下标
print('svg类名:' + self.class_name + '\n' +
'坐标:' + str((x, y)) + '\n' +
'字体大小:' + str(self.find_font_size(self.svg_text)) + '\n' +
'映射字符:' + str(real_text[index]))
if __name__ == '__main__':
name = 'vhkjj4'
example = SVG_num(name)

参考博客
作者:jspython
标题:5分钟看懂SVG反爬虫原理
https://blog.csdn.net/jspython/article/details/106071233
特别推荐没有svg基础的可以查看这个博客链接,我从中获益匪浅,有例子,有思路,有解析,源码与思路均来自于此,十分感谢原作者!!
更多推荐
所有评论(0)