Python爬虫核心知识
第二章:2.1 爬虫urllib.request请求模块
2.1 urllib.request 模块
urllib是python3自带的标准库,无需安装,直接imort导入即可。这个模块主要负责打开URL和HTTP协议之类。
由于urllib在不同的Python版本中都有明显的区别,在实际开发中也经常遇到不同版本之间互不兼容的情况。
在Python3中,urllib大致具备以下功能:
1、urllib.request:用于打开和读取URL
2、urllib.parse:用于解析URL
3、urllib.err:用于接收urllib.request产生的错误信息
4、urllib.bobotparser: 用于解析robots.txt文件(爬虫的君子协议)
urllib — URL handling modules — Python 3.10.4 documentation
完整的用法可以参考该模块的官方文档
2.1.1 urllib.request 请求
urllib.request最简单的用法就是urllib.request.urlopen,函数的语法如下:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
功能说明:Urllib是用于访问URL(请求链接)的唯一方法。
「参数解释」
- URL:需要访问的网站的请求链接地址。url的格式必须完整。
-
import urllib.request response = urllib.request.urlopen('https://www.baidu.com') print(response.read().decode('utf8'))
返回值response:urlopen返回的response对象是http.client.HTTPResponse类型,主要包含read()、readinfo()、getheader(name)、getheaders()、fileno()等方法。
- data:urllib会判断data参数是否为None从而区分请求方式。默认值None,代表请求方式为GET,反之请求方式为POST。参数data的数据由字典类型转换成字节类型才能完成POST请求!
- GET 特点 :查询参数在URL地址中显示
- POST
- 在Request方法中添加data参数 urllib.request.Request(url,data=data,headers=headers)
- data :表单数据以bytes类型提交,不能是str
-
import urllib.parse import urllib.request data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8') response = urllib.request.urlopen('http://httpbin.org/post', data=data) print(response.read().decode('utf8'))
- timeout:指定请求时间的超时设置,单位为秒。如果不指定,那就执行全局默认的超时设置。若请求超时,则会抛出urllib.error.URLError异常,可以通过try except处理异常。
-
import socket import urllib.request import urllib.error try: response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1) except urllib.error.URLError as e: if isinstance(e.reason, socket.timeout): print('TIME OUT')
- 其他参数:
- context参数必须是ssl.SSLContent类型,用来指定设置SSL。
cafile和capath分别指定CA证书和它的路径,在HTTPS中有用。
cadefault已经弃用,默认default。
- context参数必须是ssl.SSLContent类型,用来指定设置SSL。
在实际应用中,常用的参数有url、data、timeout。对网站发送请求时,网站会返回相应的相应内容,返回的是一个对象。通常会对这个返回的对象使用下列方案解析数据:
- read() 读取服务器响应的内容
- getcode() 返回HTTP的响应码
- geturl() 返回实际数据的URL(防止重定向问题)