Python爬虫核心知识

第二章:2.2 爬虫urllib.parse模块

2.2 爬虫urllib.parse模块

Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函数:

目录

Python爬虫核心知识

第二章:2.2 爬虫urllib.parse模块

2.2 爬虫urllib.parse模块

2.2.1 urllib.parse.urlparse()

2.2.2 urllib.parse.urlunparse()

2.2.3 urllib.parse.urlsplit()

2.2.4 urllib.parse.urlunsplit()

2.2.5 urllib.parse.urljoin()

2.2.6 urllib.parse.quote()

2.2.7 urllib.parse.unquote()

2.2.8 urllib.parse.urlencode()

2.2.9 urllib.parse.parse_qs()

2.2.10 urllib.parse.parse_qsl()


2.2.1 urllib.parse.urlparse()

url:urllib.parse.urlparse(url, scheme='', allow_fragments=True)

urlparse() 函数可以将 URL 解析成 ParseResult 对象,实现url的识别和分段。

urlparse
定义:def urlparse(url, scheme=”, allow_fragments=True)
将url拆分成六大组件

URL的标准链接格式为:scheme://netloc/path;params?query#fragment 基础部分  scheme 协议 基础部分 netloc 域名 基础部分 path 路径 附加部分 params 路径参数 附加部分 query 查询参数 附加部分 fragment 片段

案例如下:

from urllib.parse import urlparseurl = 'https://blog.csdn.net/crestroncarter/article/details/124376995?spm=1001.2014.3001.5501'parsed_result = urlparse(url)print('parsed_result 的数据类型:', type(parsed_result))
print('parsed_result 包含了: ', len(parsed_result), '个元素')
print(parsed_result)print('scheme  :', parsed_result.scheme)
print('netloc  :', parsed_result.netloc)
print('path    :', parsed_result.path)
print('params  :', parsed_result.params)
print('query   :', parsed_result.query)
print('fragment:', parsed_result.fragment)
print('hostname:', parsed_result.hostname)

输出结果如下:

parsed_result 的数据类型: <class 'urllib.parse.ParseResult'>
parsed_result 包含了:  6 个元素
ParseResult(scheme='https', netloc='blog.csdn.net', path='/crestroncarter/article/details/124376995', params='', query='spm=1001.2014.3001.5501', fragment='')
scheme  : https
netloc  : blog.csdn.net
path    : /crestroncarter/article/details/124376995
params  :
query   : spm=1001.2014.3001.5501
fragment:
hostname: blog.csdn.net进程已结束,退出代码0

2.2.2 urllib.parse.urlunparse()

urlunparse()是urlparse()方法的反向操作,将各部分组合为url。

定义:def urlunparse(components)
功能:将拆分的组件合并为url

from urllib.parse import urlunparse#必须按顺序设置6个部分的值,并且放置到列表中,该方法不会自动进行url转码
url_list = ['http','www.baidu.com','index.html','user= haoweixl','a=6','comment']print(urlunparse(url_list))

输出结果如下:

http://www.baidu.com/index.html;user= haoweixl?a=6#comment

2.2.3 urllib.parse.urlsplit()

urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来,只返回五个参数值,params会合并到path中。
因此,使用urlsplit()解析URL的结果只有5部分。

定义:urlsplit(url, scheme=”, allow_fragments=True)
返回:(scheme, netloc, path, query, fragment) 比urlparse少个params

url1='http://www.baidu.com/book/index.html;user?id=5#comment'result1 = urllib.parse.urlsplit(url1)#path='/book/index.html;user'

2.2.4 urllib.parse.urlunsplit()

与urlsplit()相反的操作,urlunsplit将5个部分的值进行合并。

data = ["http","www.baidu.com","index.html;user","a=10","comment"]
print(urllib.parse.urlunsplit(data))

2.2.5 urllib.parse.urljoin()

URL的6个组成部分中,有3个基础部分:协议(scheme)、域名(netloc)、路径(path),和3个附加部分:路径参数(param)、查询参数(query)、片段(fragment)。

定义:def urljoin(base, url, allow_fragments=True)

如果url是完整的url路径直接返回

#导入parse模块
from urllib import parse#相对路径
parse.urljoin('http://www.baidu.com/doc/article.html','excel/1')
# result: http://www.baidu.com/doc/excel/1parse.urljoin('http://www.baidu.com/doc/article.html','../excel/1')
# result: http://www.baidu.com/excel/1#绝对路径
parse.urljoin('http://www.baidu.com/doc/abc/article.html','/excel/1')
#result: http://www.baidu.com/excel/1

2.2.6 urllib.parse.quote()

将内容转化为 URL 编码的格式。当 URL 中带有中文参数时,可以将中文字符转化为 URL 编码。

定义:quote(string, safe=’/’, encoding=None, errors=None)

url中出现中文可能会乱码,所以中文路径需要转化,就用到了quote方法。

实例如下:

from urllib.parse import quote
keyword = '中国'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)

运行结果:

https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD

2.2.7 urllib.parse.unquote()

有了quote方法转换,也需要有unquote方法对URL进行解码。

实例如下:

from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD'
print(unquote(url))

运行结果:

https://www.baidu.com/s?wd=中国

2.2.8 urllib.parse.urlencode()

将字典参数序列化为 GET 请求参数

定义:urlencode(query, doseq=False, safe=”, encoding=None, errors=None,quote_via=quote_plus)功能:将字典形式的数据转化成查询字符串参数的含义:
query:需要转化的字典数据
doseq:如果字典的某个值是序列的话是否解析,deseq值为False不解析doseq的值为True的时候解析
safe:那些字符串不需要编码
encoding:要转化成的字符串的编码
quote_via:使用quote编码还是qutoe_plus编码,默认quote_plus也就是空格被转化成+号

实例如下:

from urllib.parse import urlencode
data = {'ie': 'utf-8','wd': 'TRHX',
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(data)
print(url)

运行结果:

http://www.baidu.com?ie=utf-8&wd=TRHX

2.2.9 urllib.parse.parse_qs()

与 urlencode() 相反,可以将一串GET请求参数反序列化,转换为字典。

实例如下:

from urllib.parse import parse_qs
query = 'name=TRHX&age=20'
print(parse_qs(query))

运行结果:

{'name': ['TRHX'], 'age': ['20']}

2.2.10 urllib.parse.parse_qsl()

与parse_qs()类似,不同的是将参数转化为元组组成的列表。

实例如下:

from urllib.parse import parse_qsl
query = 'name=TRHX&age=20'
print(parse_qsl(query))

运行结果:

[('name', 'TRHX'), ('age', '20')]

Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块相关推荐

  1. Python爬虫核心知识-序章:课程前导-爬虫的相关法律法规

    Python爬虫核心知识 序章:课程前导-爬虫的相关法律法规 爬虫程序是一种技术产物,爬虫代码本身并未违反法律.但程序运行过程中有可能对他人经营的网站造成 破坏,爬取的数据有可能涉及隐私或机密,数据的 ...

  2. JavaScript核心知识第二章---事件高级(含大量代码分析)

    前言 ❤️ 一个人有多重的才华,骨子里就会刻上多大重量的谦卑 ❤️ JavaScript核心知识第二章---事件高级 一.JavaScript 事件高级 (1)注册事件(绑定事件) 1.1 注册事件概 ...

  3. Python精确指南——第三章 Selenium和爬虫

    3       Selenium 3.1     介绍 网络爬虫在互联网领域有着广泛的应用. Selenium是一个页面自动化控制框架.能够模拟实际操作,自动化获取网站提供的页面资源信息. Selen ...

  4. python编程思维导图_用来梳理 Python 编程核心知识15张思维导图

    原标题:用来梳理 Python 编程核心知识15张思维导图 小编这次在逛论坛的时候,无意中发现了一份python的武功秘籍,也就是一份思维导图,堪称业界经典! 思维导图可以有力地激发你的联想,通过一个 ...

  5. python编程基础知识体系_【汇总】Python 编程核心知识体系

    [汇总]Python 编程核心知识体系 大神著作,源自:https://woaielf.github.io/2017/06/13/python3-all/ 本文主要涵盖了 Python 编程的核心知识 ...

  6. Python面试宝典(第二章 Python基础)

    Python面试宝典(第二章 Python基础) Python面试宝典(第二章 Python基础) 基础语法 输入输出 问题:代码中要修改不可变数据会出现什么问题? 抛出什么异常? 问题:a=1,b= ...

  7. 路飞学城-python爬虫密训-第二章

    (一)学习心得 第二章的python爬虫密训,又有新的模块Flask,time,re(正则表达式):这次是一步步去爬取web微信的相关信息,怎么讲,也许自己没有前期网页开发相关学习,学习有点难度,希望 ...

  8. 《Python编程 从入门到实践》 一、基础知识 第二章 变量和简单的数据类型

    为了所谓的效率哈(其实是因为本人比较懒,emm...),这里直接从第二章开始学习,但是考虑一些小白同学还是给大家简短介绍一下第一章. 第一章主要介绍环境的搭建和一些安装问题 1.环境的搭建可参考:Py ...

  9. 6位专家耗时90天打造,Python的核心知识,都在这里了!

    最近几年 Python 语言超级火爆,不只是编程圈内火,各行各业的圈子里也都在讨论. 为什么突然之间,各行各业的人都来学习 Python 呢? 作为从业者,我就经常被用户询问:为什么要学 Python ...

最新文章

  1. java 多线程 start,Java 线程的run()和start()
  2. boost :: hash_combine从类的不同成员生成哈希值
  3. SVN 常用命令笔记
  4. ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中
  5. 快应用比赛_我的应用如何在国际学生比赛中获得第三名
  6. 用单片机测量流体流速的_影响超声波流量计(热量表)测量精度的主要因素
  7. SQL使用总结三(系统目录)
  8. modbus_tk与Modubs Slave结合使用
  9. CISCO路由器的备份与还原(1)
  10. java idle 机制_深入springboot原理——一步步分析springboot启动机制(starter机制)...
  11. android微软雅黑字体,关于 Android 默认字体以及对比微软雅黑字体
  12. Java基础——对象和类1(面向对象基本概念)
  13. android 本地阅读pdf,Android 打开本地pdf文件
  14. Vivado使用系列:使用自定义BD
  15. android实现vr 功能,VR模式成亮点:属于Android N的10大新功能
  16. 沈阳市委书记邀请深兰科技赴沈建厂,助力东北振兴
  17. Android 仿2016版京东筛选
  18. 对称数c语言,中心对称数 - Developmer的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. oracle存储过程的赋值,ORACLE_存储过程_赋值
  20. 【报错总结】无法连接Hive的MetaStore数据库

热门文章

  1. python 爬虫 链家网二手房信息采集代码
  2. repeater的使用方法详解
  3. 答网友在企业工作中实际SEHLL问题
  4. 自己的服务解密,获取微信小程序用户的手机号码
  5. 安卓笔记:修正Task ‘wrapper‘ not found in project
  6. 《数据库系统原理》实验6:视图管理
  7. 代码回滚,你真的理解吗?
  8. 你知道管理的精髓是什么吗?-进度猫带你走进管理者的世界
  9. 我对于UI设计这个领域的理解
  10. Chrome 开发者工具各种骚技巧