urllib库
urllib库是Python
中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返
回的数据。urllib
库是python内置的一个http请求库,不需要额外的安装。只需要关注请求的链接,参数,提供了强大的解析。
urllib库
提供了如下功能:
- 网页请求
- 响应获取
- 代理和cookie设置
- 异常处理
- URL解析
爬虫所需要的功能,基本上在urllib
中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests
库。
urllib库有一下三个模块:
- urllb.request 请求模块
- urllib.error 异常处理模块
- urllib.parse 解析模块
urllib库中的urlopen函数:
在Python3
的urllib
库中,所有和网络请求相关的方法,都被集到urllib.request
模块下面了,首先来讲一下urlopen函数:
实际上,使用浏览器访问百度,右键查看源代码。你会发现,跟我们刚才打印出来的数据是一模一样的。也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬下来了。一个基本的url请求对应的python代码真的非常简单。 以下对urlopen
函数的进行详细讲解:
1.url:请求的url。
2.data:请求的data
,如果设置了这个值,那么将变成post
请求。
3.返回值:返回值是一个http.client.HTTPResponse
对象,这个对象是一个类文件句柄对象。有read(size)
、readline
、readlines
以及getcode
等方法。
read()方法:读取整个页面的全部代码。
readline()方法:读取某一行的代码,默认是第一行的代码。
readlines()方法:按行来读取整个页面的代码存放在数组中。
getcode()方法:读取整个页面的状态码。
(1)简单的get请求
import urllib.request
reponse = urllib.request.urlopen('http://www.baidu.com')
print(reponse.read().decode('utf-8'))
(2)简单的post请求
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'hello':'world'}),encoding='utf-8')
reponse = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(reponse.read())
(3)超时处理
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'hello':'world'}),encoding='utf-8')
reponse = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(reponse.read())