【python】SVG映射反爬

SVG简述说明

SVG是用于描述二维矢量图形的一种图形格式。它基于XML描述图形,对图形进行放大或缩小操作都不会影响图形质量。
由于SVG中的图形代表的也是一个个文字,所以在使用时必须在后端或前端将真实的文字与对应的SVG图形进行映射和替换。

实例

  • 下图中我们可以看到在定位源代码中的电话部分的html文件的标签内容(单个号码数字)都是一样的,我们需要去寻找真正的源代码内容


    大众点评示例
  • 在Network中寻找搜索


    真正的源代码部分
  • 需要对比其数字代码所代表的数字,获得数字映射(其中1正常显示的)


    映射
  • 这样子我们就很简单的进行电话号码的获取了

代码示例(大众点评)(需添加已登录的请求头信息)

import requests
from lxml import etree
from copyheaders import headers_raw_to_dict

# 定义映射关系
mappings= {
    '\uf8e2':'0',
    '\uf42d':'2',
    '\uf5c1':'3',
    '\uf5d4':'4',
    '\ue71d':'5',
    '\ue4f5':'6',
    '\uf2c0':'7',
    '\uf223':'8',
    '\uea15':'9'
}
mappings_list = []
url = 'http://www.dianping.com/shop/G41TRhMLL80DPFTN'
h = '''
添加请求头
'''
h = bytes(h, encoding="utf-8")
headers = headers_raw_to_dict(h)
respones = requests.get(url, headers=headers)
company_html = etree.HTML(respones.text)
# print(company_data)
nums = company_html.xpath('//p[@class="expand-info tel"]//text()')
print('查询结果:', nums)
for i in nums:
    if '1' in i or ' ' in i:
        mappings_list.append(i)
        continue
    num = mappings.get(i)
    if num is None:
        continue
    mappings_list.append(num)

print(''.join(mappings_list))
  • 返回输出
查询结果: [' ', '电话:', ' ', '\uf8e2', '\uf42d', '1-', '\ue4f5', '\uf5d4', '\uf8e2', '\uf5c1', '\uf8e2', '\uf2c0', '\uf5c1', '1 ']
  021-64030731 

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 当 JavaScript 被 Netscape 公司发明出来时,它被用来做一些琐细的事情,比如校验表单、计算...
    locky丶阅读 2,211评论 0 5
  • 我今年37岁,结婚已经六年了。说实话,在我们那31岁结婚算晚的,当时没有结婚时爸妈天天催,也不是没有人追,也不是...
    阿芙萝黛瑅阅读 111评论 0 1
  • 病了一场,住了几天的院,以为调整好了可以完全的重新收拾一下自己的生活了,却发现最终还是难逃现状,慢慢的一点点吧。生...
    不丑的丑哥阅读 213评论 0 1
  • 张沃中 上海运城制版有限公司 【日精进打卡第19天】 【知~学习】 《六项精进大纲》3遍 共41遍 《大学》1遍 ...
    沃中阅读 87评论 0 0
  • 你有执念吗?对爱情对友情对某事某物。我是有的,这得谢谢我的两个闺蜜。南京的娟和南通的林,从九七年认识一直到现在,我...
    漂泊者雨雪霏霏阅读 79评论 0 0