欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Python 会随机生成电话号码进行测试。

最编程 2024-04-08 14:19:19
...

Python 随机生成 Phone 号码

    • 随机手机号码
    • Python 生成一亿个手机号
    • 用 time 模块生成

随机手机号码

在爬虫实战中,有一项数据是不能采集的,这个数据就是电话号,所以本篇博客补充这个小知识点,用 Python 随机生成电话号,便于后续使用。

在 Python 中生成电话号码,你可以使用 random 模块来生成随机的前缀和后缀,再将它们组合起来即可。

示例代码如下所示:

import random

def generate_phone_number():
    # 随机生成电话号码的前缀
    prefix = random.choice(['130', '131', '132', '133', '134', '135', '136', '137', '138', '139',
                           '150', '151', '152', '153', '155', '156', '157', '158', '159',
                           '180', '181', '182', '183', '184', '185', '186', '187', '188', '189'])
    # 随机生成电话号的后缀
    suffix = ''.join(random.choice(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) for _ in range(8))
    # 将前缀和后缀组合起来,生成电话号
    return prefix + suffix

phone_number = generate_phone_number()
print(phone_number)

然后我们将上述代码封装到爬虫训练场中,形成一个新的 API 接口,便于后续使用。

在 Python Flask 中返回 JSON 数据,用到 jsonify() 函数,它可以将 Python 字典转换为 JSON 格式的字符串,作为 HTTP 响应主体返回。

@api.route('/phone')
def phone():
    def generate_phone_number():
        # 随机生成电话号的前缀
        prefix = random.choice(['130', '131', '132', '133', '134', '135', '136', '137', '138', '139',
                                '150', '151', '152', '153', '155', '156', '157', '158', '159',
                                '180', '181', '182', '183', '184', '185', '186', '187', '188', '189'])
        # 随机生成手机号码的后缀
        suffix = ''.join(random.choice(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) for _ in range(8))
        # 将前缀和后缀组合起来,生成电话号
        return prefix + suffix

    phone_number = generate_phone_number()
    phone = {
        'phone': phone_number
    }

    return jsonify(phone)

该接口已经部署到 爬虫训练场,欢迎测试使用。

Python 生成一亿个手机号

这是群友提出的一个小诉求,他希望能用 Python 快速的生成大量手机号。

import random
import string
def create_phone(num):
    all_phone_nums = set()
    while True:
        start = random.choice(['186', '187', '155'])
        end = ''.join(random.sample(string.digits, 8))  # 随机生成后8位数
        all_phone_nums.add(f'{start}{end}')  # 拼接手机号
        print(all_phone_nums)
        if len(all_phone_nums) >= num:  # 死循环停止条件
            break

create_phone(10000 * 10000)

上述代码用到了 string.digits ,这是一个字符串常量,其余常量清单如下。

  • string.digits:包含数字 0~9 的字符串;
  • string.ascii-letters:包含所有字母;
  • string.lowercase:包含所有小写字母的字符串;
  • string.printable:包含所有可打印字符的字符串;
  • string.punctuation:包含所有标点的字符串;
  • string.uppercase:包含所有大写字母的字符串。

在这里插入图片描述

都是随机生成的,打不通的哦~

用 time 模块生成

实战中要想得到随机数字,还可以使用时间戳实现,例如下述代码

import time
import random


def get_phone():
    mobiles = ['180', '181', '182', '183', '184']
    number = str(int(time.time()))[2:]
    mobile = random.choice(mobiles) + number
    return mobile


print(get_phone())

因为时间戳每次都不相同,所有可以用作随机生成号码。
在这里插入图片描述