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函数进行详细讲解:
- url:请求的url
- data:请求的data,如果设置这个值,那么将变成post请求。
- 返回值:返回值是一个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)