From 4953c488e1a3f215e0dde0fb2d4538ca0bf68a6e Mon Sep 17 00:00:00 2001 From: bvwl <2201101122@qq.com> Date: Tue, 25 Nov 2025 14:17:02 +0800 Subject: [PATCH] 0.1.6 --- README.md | 2 ++ spider/work.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b02b54c..6df819c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# 0.1.6 +- 信息变为本地生成 # 0.1.5 - 新增status字段 # 0.1.4 diff --git a/spider/work.py b/spider/work.py index dad3f53..1584cb0 100644 --- a/spider/work.py +++ b/spider/work.py @@ -386,12 +386,77 @@ def generate_canada_info(province: str, city: Optional[str] = None, max_attempts def get_random_canada_info(province, city) -> Dict[str, str]: """ - 随机生成加拿大个人与地址信息,省份随机选择,城市随机选择 + 本地生成加拿大个人与地址信息(不依赖外部网络) + + 参数: + province (str): 省份(如 "Alberta" 或 "AB") + city (str | None): 城市(如 "Calgary"),不传则按省份随机 返回值: dict: 包含 Firstname、Lastname、全名、生日、街道地址、城市、电话、邮编、州全称 """ - return generate_canada_info(province, city) + prov_abbr = _normalize_province(province) + _, _, chosen_city = _pick_coords(prov_abbr, city) + + firstname, lastname = _random_name() + full_name = f"{firstname} {lastname}" + birthday = _random_birthday() + phone = _random_phone_city(prov_abbr, city or chosen_city) + + def _random_street() -> str: + """ + 生成本地街道地址 + + 返回值: + str: 形如 '123 Maple Ave' 的地址 + """ + house = random.randint(10, 9999) + street_roots = [ + "Maple", "Oak", "Pine", "Cedar", "Elm", "Birch", "Willow", "Spruce", "Ash", + "River", "Lake", "Hill", "Queen", "King", "Main", "Victoria", "Wellington", + "Church", "College", "Centre" + ] + suffixes = ["St", "Ave", "Rd", "Blvd", "Dr", "Ct", "Pl", "Ln", "Way", "Terrace"] + return f"{house} {random.choice(street_roots)} {random.choice(suffixes)}" + + def _random_postal(p_abbr: str) -> str: + """ + 生成加拿大邮编(A1A 1A1),首字母符合省份规范 + + 参数: + p_abbr (str): 省份缩写 + + 返回值: + str: 邮编 + """ + allowed_letters = "ABCEGHJKLMNPRSTVXY" + prefixes = POSTAL_PREFIXES.get(p_abbr) or set(allowed_letters) + first_letter = random.choice(sorted(list(prefixes))) + + def L() -> str: + return random.choice(allowed_letters) + + def D() -> str: + return str(random.randint(0, 9)) + + return f"{first_letter}{D()}{L()} {D()}{L()}{D()}" + + address_str = _random_street() + city_name = city or chosen_city + postcode = _random_postal(prov_abbr) + province_full = next((k for k, v in CA_PROVINCE_ABBR.items() if v == prov_abbr), prov_abbr) + + return { + "firstname": firstname, + "lastname": lastname, + "full_name": full_name, + "birthday": birthday, + "address_str": address_str, + "city_name": city_name, + "phone": phone, + "postcode": postcode, + "province": province_full, + } def main() -> None: