#调用parse和request
from urllib import request,parse
#调用了两种错误形式
from urllib.error import HTTPError,URLError
#创建函数,路由,headers=None,headers默认为空
def get(url,headers=None):
#返回值调用下面的urlrequests函数
return urlrequests(url,headers=headers)
def post(url,form,headers=None):
# 返回值调用下面的urlrequests函数
return urlrequests(url,form,headers=headers)
#设置urlrequests函数,路由,form设置默认为空,headers默认为空
def urlrequests(url,form=None,headers=None):
#伪装为浏览器访问
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
#判断,如果headers为空那么执行此行代码传入user_agent,如果用户自行传入便覆盖
if headers==None:
headers = {
'User-Agent':user_agent
}
#创建byte类型储存变量
html_bytes=b""
#用try检测是否错误,如果不错误,那么执行此代码
try:
#判断form是否为true,如果为rtue那么执行此代码
if form:
#由字典转换为byte类型步骤,1.转换为字符串类型2.转换为byte类型
#PosT类型
#将form字典转换为str类型
form_str = parse.urlencode(form)
#将form_str 字符串转换成byte类型
form_bytes = form_str.encode('utf-8')
req = request.Request(url,data=form_bytes,headers=headers)
#如果form不为True那么执行此代码
else:
#创建一个Request类来构建一个请求
req = request.Request(url,headers=headers)
# urlopen()方法可以实现最基本请求的发起
response = request.urlopen(req)
#读取并把读取到的内容给一个新的变量
html_bytes = response.read()
#判断是否有HTTPRrror错误如果有执行此代码
except HTTPError as e:
#输出错误
print(e)
#判断是否有URLError错误如果有执行此代码
except URLError as e:
# 输出错误
print(e)
#返回 html_bytes,此时此变量的类型为byte类型
return html_bytes
if __name__=='__main__':
#输入路由
# url = 'http://fanyi.baidu.com/sug'
#输入要查的字典内容
# form = {
# 'kw': '呵呵'
# }
#post是自定义的函数,传送值到post函数
# html_bytes = post(url, form=form)
# print(html_bytes)
url = 'http://www.baidu.com'
#get是自定义的函数,传送值到get函数里
html_byte=get(url)
print(html_byte)
#相关笔记
#data参数如果要传必须传bytes(字节流)类型的,如果是一个字典,先用urllib.parse.urlencode()编码。
封装爬虫
最新推荐文章于 2023-11-06 21:04:11 发布
本文介绍了一个使用Python进行网络请求的实战案例,通过自定义函数实现了GET和POST请求,并详细展示了如何处理请求过程中的各种异常情况。
954

被折叠的 条评论
为什么被折叠?



