综述
本系列文档用于对Python爬虫技术进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。
Python 版本是3.7.4
urllib库介绍
它是 Python 内置的HTTP请求库,也就是说我们不需要额外安装即可使用,它包含四个模块(主要对前三个模块进行学习):
request : 它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。 error : 异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。 parse : 用于解析URL,提供了许多URL处理方法,比如拆分、解析、合并等等的方法,以及对参数的拼接等待。 robotparser : 主要是用来识别网站的robots.txt协议文件,然后判断网站的那些数据可以爬,哪些数据不可以爬的,其实用的比较少。urllib.request 介绍
urlopen()
1.参数说明(仅写了四个最常用的参数)
url : 爬取目标的URL;
data : 请求参数,如果设置该参数,则请求默认为post请求;没有默认为get请求;
timeout : 用于设置超时时间,单位为秒;
context : 必须是一个ssl.SSLContext类型,用来指定SSL设置,忽略未认证的CA证书;
2.具体用法
GET 请求方式
# 导入urllib库 import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 url = "http://www.baidu.com" response = urllib.request.urlopen(url=url) print(type(response)) # 类文件对象支持文件对象的操作方法,如read()方法读取文件全部内容,返回字符串 html = response.read() # html = response.readline() # 读取一行 # html = response.readlines() # 读取多行,返回列表 # 打印响应结果(byte类型) print(html) # 打印响应结果(utf-8类型) # 二进制和字符串之间的相互转码使用 encode() 和 decode() 函数 # encode() 和 decode() 可带参数,不写默认utf-8,其他不再特别说明 print(html.decode()) # 打印状态码 # print(response.get_code()) print(response.status) # 获取响应头 print(response.getheaders()) # 获取响应头Server信息 print(response.getheader('Server')) # 获取响应结果原因 print(response.reason)
POST 请求方式
# 导入urllib库 import urllib.parse import urllib.request # 向指定的url发送请求,并返回 post_url = 'https://fanyi.baidu.com/sug' # 传入参数 form_data = { 'kw': 'honey' } # 格式化参数 form_data = urllib.parse.urlencode(form_data).encode() response = urllib.request.urlopen(url=post_url, data=form_data) # 打印服务器响应的类文件对象 print(type(response)) # 类文件对象支持文件对象的操作方法,如read()方法读取文件全部内容,返回字符串 html = response.read() # 打印响应结果(byte类型) print(html) # 打印响应结果(utf-8类型) print(html.decode()) # 打印状态码 print(response.status) # print(response.getcode()) # 获取响应头 print(response.getheaders()) # 获取响应头Server信息 print(response.getheader('Server')) # 获取响应结果原因 print(response.reason)
urlretrleve()
1.参数说明
url : 下载链接地址;
filename : 指定保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据);