美文网首页
【python】SVG映射反爬

【python】SVG映射反爬

作者: 米兰的小铁匠 | 来源:发表于2020-04-13 15:47 被阅读0次

    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 
    

    相关文章

      网友评论

          本文标题:【python】SVG映射反爬

          本文链接:https://www.haomeiwen.com/subject/fqrcmhtx.html