Python爬虫系列(2)urllib

Python爬虫系列(2)urllib

urllib 库

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

(1)urlopen 函数

在Python3 的urllib库中,所有和网络请求相关的方法,都被放到urllib.request模块下面了,下面举一个例子:

from urllib import request
response = request.urlopen("http://www.baidu.com")
print(response.read())

实际上,使用浏览器访问百度,点击右键查看源码,我们会发现,网页的源码与我们打印出来的结果一样。

下面对urlopen函数进行详细讲解:

  1. url:请求的url
  2. data:请求的data,如果设置这个值,那么将变成post请求。
  3. 返回值:返回值是一个http.client.HTTPresponse对象,这个对象是一个类文件句柄对象,有read(size)、readline、readlines以及getcode等方法

(2)urlretrieve函数

这个函数可以翻遍的将网页上的一个文件保存到本地,下面举个例子

from urllib import request
request.urlretrieve("http://baidu.com","baidu.html")

(3)urlencode函数:

用浏览器发送请求的时候,如果url中包含了中文或者其他的特殊字符,那么浏览器会自动地给我们进行编码,而==如果使用代码发送请求,那么就必须手动的进行编码,==这时候就应该使用urlencode函数实现,urlencode可以把字典数据转换为url编码的的数据。例子如下:

from urllib import parse
data = {'name':'爬虫基础','greet':'hello world','age':100}
qs = parse.urlencode(data)
print(qs)

(4)parse_qs函数:

可以将经过编码的后的url参数进行编码,示例代码如下:

在这里插入图片描述

(5)urlparse和urlsplit

有时候拿到一个url,想要对这个url中的各个组成部分进行分割,这时候可以使用urlparse和urlsplit来分割

urlparse与urlsplit功能基本相同,只不过urlparse分割的内容包含params参数,urlsplit不包含该参数

即url = ‘http://www.baidu.com/s;hello?username=zhiliao’,urlparse可以获得hello,但是urlsplit不可以获得。

示例代码如下:

from urllib import request,parse
url = 'http://www.baidu.com/s?username=zhiliao'
result = parse.urlsplit(url)
print('scheme:',result.scheme)
print('netloc',result.netloc)
print('path',result.path)
print('query:',result.query)

在这里插入图片描述

(6)request.Request类

如果想要在请求时增加一些请求头,那么就必须使用request.Request类来实现。

例子如下:

from urllib import request
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}

req = request.Request("http://www.baidu.com/",headers = headers)
resp = request.urlopen(req)
print(resp.read)

(“http://www.baidu.com/”,headers = headers)
resp = request.urlopen(req)
print(resp.read)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值