爬虫(2)urllib和parse库的介绍和常用函数介绍和使用

urllib库的介绍

urllib库是python中最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据.

urlopen函数

在python的urllib库中,所有与网络请求相关的方法,都被集到urllib.request模块下,来看urlopen基本的使用吧

from urllib import request
resp = request.urlopem('http://www.baidu.com')
print(resp.read())

实际上使用浏览器访问百度,右键查看源代码,你会发现,跟我们刚才打印出来的数据是一模一样的.也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬下来了.一个基本的url请求对象的python代码非常简单.
以下是对urlopen函数的详细解释:

  • url : 请求的url
  • data : 请求的data值,如果设置了这个值,那么请求会变成post请求.
  • 返回值 : 返回值是一个http.client.HTTPResponse对象,这个对象 是一个类文件句柄对象.有read(size),readline,readlines以及getcode方法.
from urllib import request
resp = request.urlopen('http://www.baidu.com')

print(resp.read())# read(size)把爬出来网页读下来,不指定就是读全部
print(resp.read(10))#指定读的字节数
print(resp.getcode())#获取到返回的状态码
print(resp.readline())#以行的形式读

urlretrieve函数:

这个函数可以方便的将网页上的一个文件保存到本地.以下代码可以非常方便的将英雄联盟魔法少女的图片保存到本地.

from urllib import request
request.urlretrieve('http://pic2.52pk.com/files/161014/6146134_094628_1.jpg','mofashaonv.jpg')
  • 函数语法:
  • request.urlretrieve(url,文件路径)
    在这里插入图片描述
    在这里插入图片描述

urlencode函数:

用浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码,而使用python爬虫程序发送请求时,就需要我们自己手动的进行编码,这时候就应该使用urlencode函数来实现.urlencode可以把字典数据转换为URL编码的数据.

from urllib import parse
# urlencode函数的用法:
params = {'name':'张三','age':15,'greet':'hello world'}
result = parse.urlencode(params)
print(result)

这里说的对字典数据转化为URL编码的数据,即字典的key和value之间使用=来相连接的,而且把中文和特殊字符转化为了URL编码.

parse_qs函数:

可以将经过编码的url参数进行解码.

from urllib import parse
params = {'name':'张三','age':15,'greet':'hello world'}
#先编码
qs = parse.urlencode(params)
#再解码
result = parse.parse_qs(qs)
print(result)#解码后的输出

urlparse和urlsplit:

有时候拿到一个url,想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlparse或者是urlsplit来进行分割.

from urllib import parse

#练习使用urlparse函数和urlsplit
#有时候拿到一个url想要对这个url进行拆分,这时候就可以使用urlparse或者是urlsplist进行分割

#urlparse和urlsplit几乎是一样的,唯一一点不同的是urlparse是有params属性的,但是urlsplit是没有params属性的

#假设一个要操作的url
url = 'http://www.baidu.com/s?wd=python&username=abc#1'
result =parse.urlparse(url)
#获取到一个解析结果,这是一个中间过程,展示过程,非必须输出
print(result)
print('协议scheme为',result.scheme)
print('域名地址path为',result.path)
print('params= ',result.params)
print('查询参数query为 ',result.query)
print('锚点fragment为',result.fragment)

print('**********************')
#使用urlsplit
url = 'http://www.baidu.com/s?wd=python&username=abc#1'
result = parse.urlsplit(url)
print(result)
print('协议scheme为',result.scheme)
print('域名地址path为',result.path)
#print('params= ',result.params)   urlsplit没有这个属性
print('查询参数query为 ',result.query)
print('锚点fragment为',result.fragment)

博客是我在看视频学习的一些学习笔记,如有侵权,联系我,会及时删除,另外如果有兄弟们要一起鼓励,一起学习,一起成长,一起头凉凉,欢迎关注我,一起监督一起成长

发布了82 篇原创文章 · 获赞 26 · 访问量 3980

猜你喜欢

转载自blog.csdn.net/qq_40742223/article/details/105459144