Python网络爬虫(二)

Urllib库之解析链接

Urllib库里有一个parse这个模块,定义了处理URL的标准接口,实现 URL 各部分的抽取,合并以及链接转换。它支持如下协议的 URL 处理:file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、shttp、 sip、sips、snews、svn、svn+ssh、telnet、wais。

urlparse()

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result), result)

urlparse的函数格式为:urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
输出的结果为:

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

返回的结果将我们提供的链接http://www.baidu.com/index.html;user?id=5#comment拆分成了6部分:scheme、netloc、path、params、query、fragment。所以我们可以得知一般的标准的链接格式:scheme://netloc/path;parameters?query#fragment

urlunparse()

接收的参数必须是一般url能拆分的6部分(长度必须为6,否则会抛出参数数量不足的问题)。这个函数的意思就是将拆分的6部分结合在一起成为一个完整的url。

urlsplit()

和 urlparse() 方法非常相似,只不过它不会单独解析 parameters 这一部分,只返回五个结果,即 parameters 会合并到 path中。

urlunsplit()

与 urlunparse() 类似,也是将链接的各个部分组合成完整链接的方法,传入的也是一个可迭代对象,例如列表、元组等等,唯一的区别是,长度必须为 5。

urljoin()

uelunparse()与urlunsplit()方法都是限定了参数的链接合并,但其实我们可以利用urljoin(),这也是爬虫中最常用的方式。首先定义一个base_url,再定义一个新的参数作为完整链接的剩余部分。base_url 提供了三项内容,scheme、netloc、path,如果这三项在新的链接里面不存在,那么就予以补充,如果新的链接存在,那么就使用新的链接的部分。base_url 中的 parameters、query、fragments 是不起作用的。举个例子base_url=‘https://www.baidu.com’,如果新的参数为'?q=hh',那么urljoin()之后就是‘https://www.baidu.com?q=hh’。如果新的参数为一个链接形式'www.baidu.com?category=2#comment',那么最后形成的连接形式就为新的链接而忽略了base_url。

urlencode()

个常用的 urlencode() 方法,它在构造 GET 请求参数的时候非常有用。

from urllib.parse import urlencode

params = {
    'name': 'germey',
    'age': 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)

首先声明了一个字典,将参数表示出来,然后调用 urlencode() 方法将其序列化为 URL 标准 GET 请求参数。
得到的结果为:

http://www.baidu.com?name=germey&age=22

parse_qs()

有了序列化必然就有反序列化,如果我们有一串 GET 请求参数,我们利用 parse_qs() 方法就可以将它转回字典

parse_qsl()

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

quote()

quote() 方法可以将内容转化为 URL 编码的格式,有时候 URL 中带有中文参数的时候可能导致乱码的问题,所以我们可以用这个方法将中文字符转化为 URL 编码:。注意观察网址的时候会发现,有些网站之后会有很长一串的字母符号数字混合组成的字符串,这有可能是加密后的编码,也有可能是URL编码的转换,举个例子:

from urllib.parse import quote

keyword = '壁纸'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)

得出的结果为:

https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8

unquote()

可以进行URL解码。

作者:YunLambert

-------------------------------------------

个性签名:一名会音乐、爱健身的不合格程序员

可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾

原文地址:https://www.cnblogs.com/yunlambert/p/8520022.html