qq号查询手机号网页 您所在的位置:网站首页 腾讯手机号 qq号查询手机号网页

qq号查询手机号网页

2022-03-24 06:31| 来源: 网络整理| 查看: 265

黄页88网站反爬措施对手机号进行了一些加密处理。这里介绍一下怎么解密手机号码的方法。

首先,我们看一下网站显示的手机号是这样的:

ecbd66cf1791

显示的手机号

使用ctrl c复制粘贴后变成了这样:

ecbd66cf1791

复制后的手机号码

而实际上,用Python爬虫获取到的内容是这样的:

ecbd66cf1791

爬虫获取到的数据

经过分析,发现这些数据其实有以下特点:

每次刷新网页,编码会变

编码之间其实有关系(实际上就是0-9转换成了16进制)

所以,我们的思路就是:

确定手机号码开头1对应的是第一个编码

然后根据第一个编码获取0-9对应的16进制编码

在通过编码检索出这串编码对应的电话号码

步骤:

首先爬取到电话号码的代码

code_list='򈊷򈊻򈊼򈊹򈊷򈊸򈊼򈊽򈊽򈊽򈊷'

要转换为16进制,需要把替换为0

# 替换为0,用于后面直接转换为10进制数

code_list=code_list.replace("","0")

In [4]: code_list

Out[4]: '0x882b7;0x882bb;0x882bc;0x882b9;0x882b7;0x882b8;0x882bc;0x882bd;0x882bd;0x882bd;0x882b7'

上面是个字符串,要对每个编码进行处理,还是需要转换成列表,刚好对应11个号码

# 转换成列表

code_list=code_list.split(';')

In [6]: code_list

Out[6]:

['0x882b7',

'0x882bb',

'0x882bc',

'0x882b9',

'0x882b7',

'0x882b8',

'0x882bc',

'0x882bd',

'0x882bd',

'0x882bd',

'0x882b7']

因为手机号码的第一位是1,所以确定第一位16进制对应的10进制值,就可以知道0-9对应的10进制值是多少

# 确定第一个号码1对应的10进制值

c1=int(code_list[0],base=16)

In [8]: c1

Out[8]: 557751

知道了1对应的值,就创建0-9对应的10进制值

# 创建0-9对应的10进制值

int_list=range(c1-1,c1+9)

In [10]: int_list

Out[10]: range(557750, 557760)

然后将上面的数据转换成16进制

# 将其转换为hex

hex_list=[str(hex(i)) for i in int_list]

In [12]: hex_list

Out[12]:

['0x882b6',

'0x882b7',

'0x882b8',

'0x882b9',

'0x882ba',

'0x882bb',

'0x882bc',

'0x882bd',

'0x882be',

'0x882bf']

创建0-9的列表,并转换成字符串,方便后面组装成电话号码(这里0-9的顺序和hex_list里面的顺序是一一对应的)

# 创建0-9的数字对应列表

str_list=[str(i) for i in range(0,10)]

In [14]: str_list

Out[14]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

将hex和0-9的字符串组装成字典,方便后面查询

# 组装成字典方便对应

code_dict=dict(zip(hex_list,str_list))

In [16]: code_dict

Out[16]:

{'0x882b6': '0',

'0x882b7': '1',

'0x882b8': '2',

'0x882b9': '3',

'0x882ba': '4',

'0x882bb': '5',

'0x882bc': '6',

'0x882bd': '7',

'0x882be': '8',

'0x882bf': '9'}

最后一步就是通过字典查询并组装成最终的电话号码了(为了避免各种纠纷:这里的电话号码后面几位进行了修改,不是真实的用户电话)

# 见证奇迹的时刻,把电话号码翻译过来

phone="".join([code_dict[p] for p in code_list])

In [18]: phone

Out[18]: '15631267771'

所有代码如下:

code_list='򈊷򈊻򈊼򈊹򈊷򈊸򈊼򈊽򈊽򈊽򈊷'

# 替换为0,用于后面直接转换为10进制数

code_list=code_list.replace("","0")

# 转换成列表

code_list=code_list.split(';')

# 确定第一个号码1对应的10进制值

c1=int(code_list[0],base=16)

# 创建0-9对应的10进制值

int_list=range(c1-1,c1+9)

# 将其转换为hex

hex_list=[str(hex(i)) for i in int_list]

# 创建0-9的数字对应列表

str_list=[str(i) for i in range(0,10)]

# 组装成字典方便对应

code_dict=dict(zip(hex_list,str_list))

# 见证奇迹的时刻,把电话号码翻译过来

phone="".join([code_dict[p] for p in code_list])

上面这个过程最主要的一点是,我们假设编码的第一位是1,其他号码都是通过这个推算来的。但无法避免有些手机号码填错(第一位不是1),或者填的是固定电话的情况,所以无法适用于这些情况。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有