函数: 其实是一把工具 使用函数的好处: 1、解决代码冗余问题 2、时代吗的结构更加清晰 3、易管理 函数的使用必须遵循: 先定义,后调用。 函数定义语法: def 函数名(参数一,参数二...): '''注释: 声明函数''' 逻辑代码 return 返回值 def: defind 定义 函数名:必须看其名知其意 ():接收外部传入参数 注释:用来声明函数的作用 return:返回给调用者的值 定义函数的三种形式: 1、无参函数 不需要接收外部传入的参数 2、有参函数 需要接收外部传入的参数 3、空函数 pass #无参函数 def login(): user = input('请输入用户名:').strip() pwd = input('请输入密码:').strip() if user == 'Yuan' and pwd == '222': print('login successful!') else: print('login error!') #函数地址 print(login) #函数调用 login() #有参函数 #username,password 用来接收外部传入的值 def login(username,password): user = input('请输入用户名:').strip() pwd = input('请输入密码:').strip() if user == username and pwd ==password: print('login successful!') else: print('login error!') #函数调用 #若函数在定义时需要接收参数,调用者必须为其穿传参 login('Yuan','222') #空函数 ''' ATM: 1、登录 2、注册 3、提现 4、取款 5、转账 6、还款 ''' #登录功能 def login(): #代表什么都不做 pass #注册功能 def register: #代表什么都不做 pass #还款功能 def repay(): pass 函数的参数: #在定义阶段:x,y称之为形参。 def func(x,y): print(x,y) #在调用阶段:10,100称之为实参 def func(10,100) print(10,100) 位置参数: 必须按照位置一一传参。 #在定义阶段:x,y称之为位置形参 def func(x,y): print(x,y) #在调用阶段:10,100称之为位置实参 def func(10,100) print(10,100) 关键字参数: #在定义阶段:x,y称之为位置形参 def func(x=20,y=200): print(x,y) #在调用阶段:x=10,y=100称之为关键字参数,不能少传,也不能多传。 func(x=10,y=100) 默认参数: 在定义阶段,为参数设置默认值 def foo(x=10,y=200) print(x,y) #不传参,则使用默认参数 foo() #传参,使用传入的参数 foo(200,300) 函数的嵌套定义: 在函数内部定义函数 函数对象: 函数的名称空间: 内置: Python解析器自带的都称之为“内置名称空间” 全局: 所有顶着头写的变量,函数...都称之为“全名称空间”。 局部: 在函数内部定义的,都称之为“局部名称空间”。 名称空间加载顺序: 内置-->全局-->局部 查找顺序: 局部-->全局-->内置 函数嵌套定义: def func1(): print('from func1...') def func2(): pritn('from func2...) func1() #函数对象 print(func1) def f1(): pass def f2(): pass dict1 = {'1':f1,'2':f2} choice = input{'请选择功能编号:'} if choice == '1': print(dic1[choice]) dic1[choice]() elif choice == '2': print(dic1(choice)) dic1[choice]{} #名称空间 #函数的嵌套定义 def func1(): x=20 print('from func1...') print(x) def func2(): pritn('from func2...) func1() 一、爬虫原理: 1、什么是互联网? 指的是由一堆网络设备,把一台台的计算机互联到一起,称之为互联网。 2、互联网建立的目的? 互联网建立的目的是为了数据的传递以及数据的共享。 3、什么是数据? 例如淘宝、京东商品基本信息。 东方财富、雪球网的一些证卷投资信息。 4、上网的全过程: 普通用户: 打开浏览器->向目标站点发送请求->获取响应数据->渲染到浏览器中 爬虫用户: 模拟浏览器->向目标站点发送请求->获取响应数据->提取有价值的数据->持久化到数据中 5、浏览器发送的是什么请求? http协议的请求。 客户端: 浏览器,是一个软件->客户端的IP和端口 服务端: https://www.baidu.com/ www.baidu->DNS解析->百度服务端IP和端口 发送请求可以可以建立链接获取相应数据 6、爬虫的全过程 -发送请求 (需要请求库:Requests请求,Selenium请求库) -获取响应数据 (只要向服务器发送请求,请求通过后返回数据) -解析并提取数据 (需要解析库:re、BeautifulSoup4、Xpath...) -保存到本地 (文件处理、数据库、MongoDB存储库) 二、Requests请求库: 1、安装与使用 2、基本使用 import requests #导入rquests请求库 #向百度浏览器主页发送请求,获取响应对象 response = requests.get(url='https://www.baidu.com/') #设置字符编码为 'utf-8' response.encoding = 'utf-8' #打印响应文本文字 print(response.txt) #把响应文本写入本地 with open('baidu.html','w',encoding='utf-8') as f: f.write(response.txt) #向视频源地址发送请求 response = requests.get('https://www.baidu.com/') #打印二进制流,如图片、视频等数据 print(reponse.content) #保存视频到本地 with open('视频.mp4',‘wb’) as f: f.write(response.content) 1、先往梨视频主页发送请求 https//www.pearvideo.com/ 解析获取所有的视频的ID: video_1570302 re.findall() 2、获取视频详情页url: 惊险!男子抢上地铁滑倒,就脚进去了 https://www.pearvideo.com/video_1570302 揭秘坎儿井 https://www.pearvideo.com/video_1570107 import requests import re #正确,用于解析文本数据 #1、先向梨视频主页发送请求 reponse = requests.get('https://www.pearvideo.com/') #print(response.text) #re正则匹配获取所有视频id #参数一:正则匹配规则 #参数二:解析文本 #参数三:匹配模式 3、爬取视频 res_list = re.findall('<a href="video_(.*?)"',response.text,re.S) #print(res_list) #拼接每一个视频详情页url for v_id in res_list: detail_url = 'https://www.pearvideo.com/video_'+v_id # print(detail_url) #对每一个视频详情页发送请求获取视频 频源url response = requests.get(url = detail_url) #解析并提取详情页视频url #视频url video_url = re.findall('srcUrl="(.*?)"',response.text,re.S)[0] print(video_url) #视频名称 video_name = re.findall('<h1 class="video-tt">(.*?)</h1>',response.text,re.S)[0] print(video_name) #向视频url发送请求获取视频二进制流 v_response = requests.get(video_url) with open('%s.mp4' % video_name,'wb') as f: f.write(v_response.content) print(video_name,'视频爬取完成') 4、抓包分析 打开浏览器的开发者模式(检查)---->选中network 找到访问的页面后缀 xxx.html(响应文本) (1)请求url(访问页面地址) (2)请求方式: GET: 直接发送请求获取数据 https://www.cnblogs.com/login (3)响应状态码: 2xx: 成功 3xx:重定向 4xx:找不到资源 5xx:服务器错误 (4)请求头信息: User-Agent:用户带代理(证明是通过电脑设备及浏览器发送的请求) Cookies:登录用户真实信息(证明你是目标网站的用户) Referer:上一次访问的url(证明你是从目标网站跳转过来的) (5)请求体: POST请求才会有请求体 From Data { 'user':'Yuan', 'pwd':'123' } 爬虫三部曲: 1、发送请求 def get_page(base_url): response = requests.get(base_url) return response 2、解析文本 def parse_index(text) res = re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)"> #print(res) return res 3、保存数据 def save_data(data): with open('douban.txt','a',encoding='utf-8') as f: f.write(data) 4、爬取豆瓣电影 .:从当前位置开始 *:查找所有 ?:找到第一个就不找了 .*?:非贪婪匹配 .*:贪婪匹配 (.*?):提取括号内的数值 电影排名、电影url、电影名称、导演-主演-类型、电影评分、评价人数、电影简介 <div class="item">.*?<em class="">(.*?)</em> .*?<a href="(.*?)">.*?<span class="title">(.*?)</span> .*?导演:(.*?)</p>.*?<span class="rating num".*?>(.*?)</span> .*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span> if _name_ == '_main_': # num = 10 # base_url = 'https://movie.douban.com/top250?start={}&filter='.foramt(num) num=0 for line in range(10): base_url = f'https://movie.douban.com/top250?start={num}&filter=' num +=25 print(base_url) #发送请求,调用函数 response = get_page(base_url) #解析文本 movie_list = parse_index(response.text) #保存数据 #数据的格式化 for movie in movie_list: #print(movie) #解压赋值 #电影排名、电影url、电影名称、导演-主演-类型、电影评分、评价人数、电影简介 v_top,v_url,v_name,v_daoyan,v_point,v_num,v_desc = movie # v_top = movie[0] # v_url = movie[1] movie_content = f''' 电影名:{v_top} 电影url:{v_uel} 电影名称:{v_name} 导演主演:{v_daoyan} 电影评分:{v_point} 评价人数:{v_num} 电影简介:{v-desc} \n ,,, print(movie_content) #保存数据 save_data(movie_content)
day03 python基础
猜你喜欢
转载自www.cnblogs.com/weixinyuan/p/11093598.html
今日推荐
周排行