#调用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 发布