urllib
处理网络请求的python标准库
四大模块
请求模块–(request)
from urllib import request
# request对象
res = request.Request(url, headers = headers, meth = PUT, timeout = 2)
req = request.url(req)
# urlopen对象
req = request.urlopen(url)
print(res.read().decode())
urlopen对象 无法添加请求头等参数,使用post请求只需声明参数data
解析模块–操作url
url中只能包含ascii字符,而参数中可能有汉字
from urllib import parse
单个参数为汉字
parse.quote('参数值') 汉字转ascii
parse.unqutoe('ascii') ascii 转汉字
多个参数为汉字
dict = {'wd':'测试', 'code':'1', 'height':'一米八'}
parse.urlencode(dict) 编码
parse.parse_qs(dict) 解码 转回字典,value是一个列表格式
异常处理模块
防止个别url请求失败造成程序停止运行
except是请求失败后执行的代码
from urllib import error,request
try:
req = request.urlopen(url)
except error.URLError as e:
print(e.code)
print(e.resaon)
print(e.headers)
解析robots.txt文件(暂不介绍)
from urllib import robotparse
urllib3
import urllib3
GET请求
parsms = {}
http = urllib3.PoolManger()
res = http.request(GET, url, headers = headers, fields = params)
# 先构造http对象,再用对象进行请求
POST请求
parsms = {}
http = urllib3.PoolManger()
res = http.request(POST, url, headers = headers, fields = params)
res.data 查看响应数据
res.status 查看状态码
res.headers 查看headers
注意:field在GET请求中变为参数显示在url中
field在POST请求中变为form表单
json提取
import json
json.loads(res.data.encode())
爬虫开发流程
-
找到目标数据
-
分析请求流程
-
构造http请求
-
提取数据
-
数据持久化
总结:
urllib3中响应返回的响应数据为二进制数据,写入为图片时不需要解码
start_url返回的响应数据,需要经过解码后,才能进行正则匹配
data = res.data.decode('utf-8'),python默认utf-8解码
re.S 无敌匹配(可以匹配反斜杠)
.*? ?非贪婪
.* 匹配非 "\\" 数据