首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >爬虫学习(5):parse解析链接(网址)

爬虫学习(5):parse解析链接(网址)

作者头像
川川菜鸟
发布于 2021-10-18 14:06:54
发布于 2021-10-18 14:06:54
1.1K0
举报

还是以解析CSDN为例子吧,哈哈! 1.urlparse

代码语言:javascript
复制
from urllib.parse import urlparse
s=urlparse('https://www.csdn.net/?spm=1011.2124.3001.5359')#解析的网址
print(type(s),s)#打印类型和解析结果

看看打印结果:

代码语言:javascript
复制
<class 'urllib.parse.ParseResult'> ParseResult
(scheme='https',
 netloc='www.csdn.net',
 path='/',
 params='', 
 query='spm=1011.2124.3001.5359',
 fragment='')

分析下结果: ParseResult这个类型对象,打印了六个部分结果: scheme是协议,这里协议就是https netloc是域名,域名是啥就步说了吧,自己百度 path是访问路径 params就是参数 query就是查询条件,一般用作get类型的url fragment就是描点,用于定位页面内部下拉位置 所以网址的标准链接格式就是:

代码语言:javascript
复制
scheme://netloc/path;params?query#fragment

这些能看懂一个网址什么组成的了吧 2.urlunparse 与第一个对立,他接受的参数是可迭代对象,对象长度必须是6

代码语言:javascript
复制
from  urllib.parse import urlunparse
data=['http','www.baidu.com','index.com','user','a=7','comment']
print(urlunparse(data))

结果如下:

这就构造了一个url,当然随便构造一个url是不能正常访问的。对比上面的urlparse,一个是拆分url,一个是构造url,哈哈 3.urlsplit 跟urlparse类似,知识返回结果只有五个,params合并到了path中

代码语言:javascript
复制
from urllib.parse import urlsplit
s=urlsplit('https://www.csdn.net/?spm=1011.2124.3001.5359')
print(type(s),s)

老规矩还是以CSDN为例子,看打印结果:

代码语言:javascript
复制
<class 'urllib.parse.SplitResult'> 
SplitResult(scheme='https',
 netloc='www.csdn.net', 
 path='/', 
 query='spm=1011.2124.3001.5359',
 fragment='')

但是呢,SplitResult是元组类型,可以通过索取获得想要的,不用都打印出来:

代码语言:javascript
复制
from urllib.parse import urlsplit
s=urlsplit('https://www.csdn.net/?spm=1011.2124.3001.5359')
# print(type(s),s)
print(s.path)
print(s.netloc)
print(s[1])
print(s[3])

这样打印结果姐如下:

4.urlunsplit() 跟上面那个方法类似,这个就是再把各个部分组合成完整的链接,长度必须是5,举例如下:

代码语言:javascript
复制
from urllib.parse import urlunsplit
data=['http','www.csdn.net','/','spm=1011.2124.3001.5359',' ']
print(urlunsplit(data))

根据前面打印拆分结果,我再给它复原了,运行结果如下,又得到csdn首页链接了

5.urljoin 就是对链接的补充合并,自己可以多打印几个试试

代码语言:javascript
复制
from urllib.parse import  urljoin
print(urljoin('http://www.baidu.com','index.html'))
print(urljoin('http://www.baidu.com','http://www.baidu.com/index.html'))

效果如下:

6.urlencode 跟上面的类似,也是用于构造url 例子如下:

代码语言:javascript
复制
from urllib.parse import urlencode
parms={
    'name':'chuan',
    'age':'20'
}
b_url='http://www.baidu.com?'
url=b_url+urlencode(parms)
print(url)

结果:

7.parse_qs

代码语言:javascript
复制
from urllib.parse import parse_qs
u='name=chuan&age=20'
print(parse_qs(u))

parse_qs作用就是把得到的get请求参数字符串转为字典,这样便于好看理解。前面都是有序列化,这个就是反无序化。

8.parse_sql

代码语言:javascript
复制
from urllib.parse import parse_qsl
u='name=chuan&age=20'
print(parse_qsl(u))

跟上面第七个方法类似,这个就是返回的列表,列表里装的元组,元组左边为名,右边为值 9.quote

代码语言:javascript
复制
from urllib.parse import quote
key='川川'
url='http://www.baidu.com/?wd='+quote(key)
print(url)

这个很常见,我的理解就是把中文转换为url格式。对中文进行编码。

10.unquote

代码语言:javascript
复制
from urllib.parse import unquote
url='http://www.baidu.com/?wd=%E5%B7%9D%E5%B7%9D'
print(unquote(url))

它就可以把被编码后的中文还原。

这个模块差不多就这些了,学习爬虫慢慢来,不要一蹴而就。有了这个模块就可以对url解析和构造了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档