Python中如何解析和生成URL后缀的规则?
https://chengyu.911cha.com/dWQy.html
https://chengyu.911cha.com/NTZv.html
https://chengyu.911cha.com/M2dnYQ==.html
其中 dWQy、NTZv、M2dnYQ==是什么规则生成的呢?
base64decode 后的值也看不出来。
Python中如何解析和生成URL后缀的规则?
6 回复
hashids
在Python里处理URL后缀(路径参数、查询字符串等),主要用urllib.parse模块。解析时用urlparse()拆分URL,生成时用urlunparse()或手动拼接。
解析示例:
from urllib.parse import urlparse, parse_qs
url = "https://example.com/path/to/page?name=John&age=30#section"
parsed = urlparse(url)
print(f"Path: {parsed.path}") # /path/to/page
print(f"Query: {parsed.query}") # name=John&age=30
print(f"Fragment: {parsed.fragment}") # section
# 解析查询参数为字典
params = parse_qs(parsed.query)
print(f"Params: {params}") # {'name': ['John'], 'age': ['30']}
生成示例:
from urllib.parse import urlunparse, urlencode
# 方法1:用urlunparse组装
new_url = urlunparse((
'https',
'example.com',
'/new/path',
'',
urlencode({'search': 'python', 'page': 2}),
'footer'
))
print(new_url) # https://example.com/new/path?search=python&page=2#footer
# 方法2:f-string手动拼接(简单情况)
base = "https://api.example.com/data"
params = {"id": 123, "format": "json"}
query = "&".join(f"{k}={v}" for k, v in params.items())
full_url = f"{base}?{query}"
print(full_url) # https://api.example.com/data?id=123&format=json
关键点:
- 解析用
urlparse()和parse_qs() - 生成用
urlunparse()或urlencode()拼接 - 注意查询参数值可能是列表(
parse_qs返回字典值为列表)
总结:用标准库urllib.parse就够了。
也就是说没办法通过这个 url 找回原始 id 了吧?
没有关系,随机的 4 位或者多位字符来做 url 而已,这样子可以让 url 看起来比较短
这个规律肯定是不好找的,或说根本没有规律只是随机生成,和这个成语没有关系,可能是数据库的 id 有对应。
对应关系也许不是用算法或函数,只是用个关系表.
很明显这个网站做了静态化, 全部网页都是生成好的. 一个原因是反爬, 另一个就是提高性能.
你只能按字数分类页, 直接把链接解析出来再爬.


