随机中文名获取

本文介绍了一种使用Python爬虫技术从特定网站抓取随机姓名的方法。通过解析网页获取姓氏链接,进一步获取每个姓氏下的常见名字,最后随机选择并保存为文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近的一个课程项目需要随机生成名字,网上已有的解决方案是将姓,名放在两个数组里,然后随机组合,但是个人感觉不是很优雅。
    找到一个这样的网站。传送门
AUTDhT.png
    这不正是我想要的吗。。。
还等什么,直接上代码吧。

import requests
from bs4 import BeautifulSoup as bs
import random

def get_familyName_links():
    base_url = "https://www.yw11.com/"
    url = "https://www.yw11.com/qiming.php"
    r = requests.get(url)
    r.encoding = r.apparent_encoding
    soup = bs(r.text,"html.parser")
    familyNames = soup.find_all("ul",{"class":"e3"})[0]
    familyName_links = {}
    for familyName in familyNames:
        familyName_links[familyName.a.get_text()] = base_url+familyName.a["href"]
    return familyName_links

def get_names(url):
    r = requests.get(url)
    r.encoding = r.apparent_encoding      #避免中文乱码
    soup = bs(r.text,"html.parser")
    selector = soup.select("body > div.listmain > div.listleft > div.listbox > div.listbox1_text")[0]
    names = []
    for i in selector.ul.find_all("li"):
        names.append(i.get_text().strip())
    return names

def get_all_names(num_of_familyName = 3,num_of_name_per_familyName = 10):
    all_names = []
    familyName_links = get_familyName_links()
    familyNameCounter = 0
    for familyName,url in familyName_links.items():
        familyNameCounter += 1
        names = get_names(url)
        for i in range(num_of_name_per_familyName):
            all_names.append(names[i])
        if familyNameCounter == num_of_familyName:
            break;
    return all_names

def write_names_to_file(names):
    random.shuffle(names)
    with open("names.txt","w") as f:
        for name in names:
            f.write(name+"\n")


if __name__ == '__main__':
    write_names_to_file(get_all_names())

最终效果:
AUT6c4.png
是不是很有随机的感觉 ?。

参考网站:
表情来源

### 实现方案 #### 方法一:利用内置函数与 BeanShell 脚本组合 在 JMeter 的测试计划中可以采用预处理器中的 BeanShell 来生成随机中文姓名。具体做法是在 `BeanShell PreProcessor` 或者 `JSR223 PreProcessor` 中编写一段 Java 代码用于创建随机名字并将其存储到变量里供后续请求调用。 ```java import java.util.Random; Random random = new Random(); String[] lastNames = {"赵", "钱", "孙"}; int indexLastName = random.nextInt(lastNames.length); String[] firstNames = {"伟", "芳", "娜"}; int indexFirstName = random.nextInt(firstNames.length); vars.put("randomChineseName", lastNames[indexLastName] + firstNames[indexFirstName]); ``` 这段脚本会从给定的数组选取一个随机姓氏和名字组成完整的个人名称,并保存至名为 `randomChineseName` 的属性内[^3]。 #### 方法二:集成第三方库 Mock.js 另一种更为简便的方法是借助于成熟的 JavaScript 数据模拟工具——Mock.js,该插件已经被封装成了可以直接被 JMeter 使用的形式。只需要简单配置就能实现在测试过程中动态获取诸如身份证号、电话号码以及这里提到的人名等信息。 当需要使用此功能时,在 HTTP 请求或其他采样器组件里的参数位置输入 `${__Mock(@cname)}` 即可获得由系统自动产生的中国人的全名[^1]。 #### 方法三:自定义开发函数扩展 对于有更高定制化需求的情况来说,还可以考虑自行研发适合项目特点的新特性。比如之前有人分享过一种基于 JMeter 自身框架下的解决方案,即通过增加新的 UDF (User Defined Function),允许使用者指定想要得到多少个字符长度的结果,同时也支持按照一定规则设置首字为常见家族大姓以便更好地模仿真实场景下的人物命名习惯[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值