下班了,学一点Python爬虫吧 第7天基本库urllib使用(解析链接)

944 阅读2分钟

这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

祝大家新年快乐,万事如意,一切顺利

昨天学了一些,关于urllib cookie和异常处理的事,今天来学一下使用urllib 怎么去解析链接

urllib 里面的parse模块,这个模块定义了处理URL的标准接口,例如实现URL各部分的抽取,合并,以及连接转换 详细代码ref:code

urlparse

举个例子:

from urllib.parse import urlparse

result = urlparse("https://baidu.com/index.html;user?id=5#comment")
print(type(result))
print(result)

得到的结果:

<class 'urllib.parse.ParseResult'>
ParseResult(scheme='https', netloc='baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

可以看到,我们使用urlparse来进行解析他是一个ParseResult的对象 我们可以点进去看他的这个urlparse方法

截屏2022-01-31 上午11.26.16.png

  • 第一个参数很明显是要我跟给一个URL
  • 第二个scheme 模式,就是当你的URL没有吧指定HTTPS这种的的时候它就会使用你传入的参数
  • allow-fragments 是否忽略fragments 我把它理解为参数,如果设置为False 将会使得fragment部分为空

urlunparse

前面那个是解析,我就把它这个理解为构造了,接着举例子:

from urllib.parse import urlunparse

data = ["https","www.baidu.com","index.html","user","a=6","comment"]

print(urlunparse(data))

结果: https://www.baidu.com/index.html;user?a=6#comment

好神奇,注意一定是六个参数,不然就会报异常,列表类型,或者元组类型都可以,这样就成功实现了URL的构造

urlsplit

就凭我的粗浅的英语水平,这应该是URL的分割方法, 不在解析params 部分,这样就只会返回五个结果. 看例子:

from urllib import parse

result = parse.urlsplit("https://www.baidu.com/index.html;user?id=5#comment")
print(result)

结果输出: SplitResult(scheme='https', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')

这是一个元组,我们可以通过属性名来获取值,也可以通过索引来获取值

print(result.netloc,result[1])

www.baidu.com www.baidu.com

urlunsplit

相反,没什么好说的

from urllib import parse

result = parse.urlsplit("https://www.baidu.com/index.html;user?id=5#comment")
print(result)

print(result.netloc,result[1])
//上面的例子,得到是元组,我在让它拼回去
unresult = parse.urlunsplit(result)
print(unresult)

OK 过年了,学点记点就行了 代码可以在这里找到