【小知识点】Python随机生成 Phone 号码,测试用~

举报
梦想橡皮擦 发表于 2023/03/30 18:05:33 2023/03/30
【摘要】 随机手机号码在爬虫实战中,有一项数据是不能采集的,这个数据就是电话号,所以本篇博客补充这个小知识点,用 Python 随机生成电话号,便于后续使用。在 Python 中生成电话号码,你可以使用 random 模块来生成随机的前缀和后缀,再将它们组合起来即可。示例代码如下所示:import randomdef generate_phone_number(): # 随机生成电话号码的前缀...

随机手机号码

在爬虫实战中,有一项数据是不能采集的,这个数据就是电话号,所以本篇博客补充这个小知识点,用 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:包含所有大写字母的字符串。

image.png

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

用 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())

因为时间戳每次都不相同,所有可以用作随机生成号码。
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。