python爬虫必备工具箱 url解析url提取参数

一条完整的url由请求协议、域名、请求相对路径、请求参数组成,例如:
http://api.bilibili.com/x/web-interface/view?aid=44699780

请求协议: http
请求域名:api.bilibili.com
请求相对路径:/x/web-interface/view
请求参数:aid=44699780

我们在开发当中,如何快速的提取这些参数呢?
用正则?------->NO

在python3当中有自带的库urllib.parse,python2当中是w3lib.url,使用方法跟urllib.parse类似,这里不做演示

import urllib.parse
url = 'http://api.bilibili.com/x/web-interface/view?aid=44699780'
urllib.parse.urlparse(url)  # 查看ParseResult对象

Out[56]: ParseResult(scheme='http', netloc='api.bilibili.com', path='/x/web-interface/view', params='', query='aid=44699780', fragment='')

上面运行结果可以看到ParseResult对象对应的参数,接下来我们取

import urllib.parse
url = 'http://API.bilibili.com/x/web-interface/view?aid=44699780'
_ = urllib.parse.urlparse(url)

_  # 查看ParseResult对象
Out[68]: ParseResult(scheme='http', netloc='API.bilibili.com', path='/x/web-interface/view', params='', query='aid=44699780', fragment='')

_.scheme  # 请求协议
Out[69]: 'http'

_.netloc   # 请求域名
Out[70]: 'API.bilibili.com'

_.path  # 请求相对路径
Out[71]: '/x/web-interface/view'

_.query   # 请求参数
Out[72]: 'aid=44699780'

_.hostname    # 获取小写域名
Out[73]: 'api.bilibili.com'

urllib.parse.parse_qsl(_.query)  # 使用urllib.parse.parse_qsl提取请求参数,返回列表
Out[74]: [('aid', '44699780')]

urllib.parse.parse_qs(_.query)   # 使用urllib.parse.parse_qs提取请求参数,返回字典
Out[75]: {'aid': ['44699780']}




将url参数转成字典
使用urllib.parse的parse_qs和urlparse方法
from urllib.parse import parse_qs, urlparse

url = 'https://detail.tmall.com/item.htm?id=582882259976&rn=58f53a7a0bedd4d53ab13e15441320dd&abbucket=20'
# 提取url参数
query = urlparse(url).query  # wd=python&ie=utf-8
# 将字符串转换为字典
params = parse_qs(query)  # {'wd': ['python'], 'ie': ['utf-8']}
"""所得的字典的value都是以列表的形式存在,若列表中都只有一个值"""
result = {key: params[key][0] for key in params}  # {'wd': 'python', 'ie': 'utf-8'}

注意获取小写域名的.hostname方法,域名是不区分大小写,但是有时候我们获取的数据有大写有小写,可以用这个方法转换。想提取参数可以用urllib.parse.parse_qsl(返回列表), urllib.parse.parse_qs方法(返回字典)

python练习题合集
Python3 lambda表达式(匿名函数)使用详解
Scrapy-Redis手动添加添加去重url(指纹)

你可能感兴趣的:(python爬虫必备工具箱 url解析url提取参数)