不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:php-note.com  发布于:2022-02-19 10:30  分类:网络数据采集  编辑

在 Python3 中,解析URL常用的方法是 urllib.parse 模块中的 urlparse、 parse_qs 和 parse_qsl 三个函数。urlparse 将 url 分割为 scheme、netloc、path、params、query 和 fragment 这几部分,如下图所示:

在 urlparse 的基础上,parse_qs 和 parse_qsl 可以获取 url 中更详细的信息,比如:

parse_qs 和 parse_qsl 的差别在于输出数据的结果稍有不同

完整代码如下:

from urllib.parse import urlparse, parse_qs, parse_qsl
url = 'http://sys.hibor.com.cn/baogao/home/index?abc=aUqRmPpQvNoPqRsRoPvNwOxO&def=mOoOmNvMiNqQpMjMmOxO8OuNMYmMqRvPnNpN&vidd=5&keyy=TYUGUIYUI&xyz=rQmQnOrRsQxPtQ&op=0'

# 1. 获取各主要参数
path = urlparse(url).path
params = urlparse(url).params
query = urlparse(url).query
# 2. 获取详细查询信息
parse_qs(urlparse(url).query)  # {'key':['value']}
parse_qsl(urlparse(url).query)  # [('key','value')]

简单地封装一下:

文件:url_util.py

from urllib.parse import parse_qs, urlparse

from framework.utils.map_util import map_get
from framework.utils.mysql_util import mysql_is_not_empty
from framework.utils.string_util import string_is_empty


def url_get_param(url, param_name):
    """
    获取url中的某个参数的值
    参考:Python 解析 URL
    网址:https://blog.csdn.net/weixin_42902669/article/details/88907704
    :param url: 网址
    :param param_name: 参数名
    :return: 参数值
    """

    if string_is_empty(url) or string_is_empty(param_name):
        return ''

    params_map = parse_qs(urlparse(url).query)
    param_info = map_get(params_map, param_name, [])
    if mysql_is_not_empty(param_info):
        return param_info[0]

    return ''