python 全栈开发,Day32(知识回顾,网络编程基础)
python 全栈开发,Day32(知识回顾,网络编程基础)
一、知识回顾
正则模块
正则表达式
元字符 :. 匹配除了回车以外的所有字符\w 数字字母下划线\d 数字\n \s \t 回车 空格 和 tab^ 必须出现在一个正则表达式的最开始,匹配开头$ 必须出现在一个正则表达式的最后,匹配结尾| 或a|b 要么取左边的要么取右边的()|() 分组中的或 一定是长的在前面 短的在后面[] 在同一个位置上可能出现的所有字符都放在组里[^] 在同一个位置上不能出现的所有字符都放在组里() 对于一整个组做量词约束 ; python 分组优先
量词 :* 0次或多次+ 1次或多次? 0次或1次{} 具体的 {n},{n,m},{n,}
问号的用法
惰性匹配 : 量词+? 表示使用惰性匹配
分组优先 findall split ;取消分组优先 (?:。。。)
分组命名 (?P<name>...)
匹配整数
import re
ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
执行输出:
['1', '2', '60', '40', '35', '5', '4', '3']
结果是不对的,因为它把小数也拆分了,得到['40','35']
有的时候 不想要的内容需要被匹配出来
你不想要的东西包含着你想要的东西
匹配小数
import re
ret=re.findall(r"-?\d+\.\d*","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
执行输出: ['-40.35']
匹配小数或者整数
import re
ret=re.findall(r"-?\d+\.\d*|-?\d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
执行输出:
['1', '-2', '60', '-40.35', '5', '-4', '3']
加括号,优先匹配数字
['1', '-2', '60', '', '5', '-4', '3']
执行输出:
['1', '-2', '60', '', '5', '-4', '3']
删除空格
import re
ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
ret.remove('')
print(ret)
执行输出:
['1', '-2', '60', '5', '-4', '3']
数字匹配
1、 匹配一段文本中的每行的邮箱http://blog.csdn.net/make164492212/article/details/516566382、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’;分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$3、 匹配qq号。(腾讯QQ号从10000开始) [1,9][0,9]{4,}4、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d*5、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$ 或者..6、 匹配出所有整数
爬虫练习
先看一下,爬虫的过程
https://movie.douban.com/top250
豆瓣电影 Top 250
import requestsimport re import jsondef getPage(url):response=requests.get(url)return response.textdef parsePage(s):com=re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>''.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>',re.S)ret=com.finditer(s)for i in ret:yield {"id":i.group("id"),"title":i.group("title"),"rating_num":i.group("rating_num"),"comment_num":i.group("comment_num"),}def main(num):url='https://movie.douban.com/top250?start=%s&filter='%numresponse_html=getPage(url)ret=parsePage(response_html)print(ret)f=open("move_info7","a",encoding="utf8")for obj in ret:print(obj)data=json.dumps(obj,ensure_ascii=False)f.write(data+"\n")if __name__ == '__main__':count=0for i in range(10):main(count)count+=25
View Code
import re import json from urllib.request import urlopendef getPage(url):response = urlopen(url)return response.read().decode('utf-8')def parsePage(s):com = re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>''.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)ret = com.finditer(s)for i in ret:yield {"id": i.group("id"),"title": i.group("title"),"rating_num": i.group("rating_num"),"comment_num": i.group("comment_num"),}def main(num):url = 'https://movie.douban.com/top250?start=%s&filter=' % numresponse_html = getPage(url)ret = parsePage(response_html)print(ret)f = open("move_info7", "a", encoding="utf8")for obj in ret:print(obj)data = str(obj)f.write(data + "\n")f.close()count = 0 for i in range(10):main(count)count += 25
简化版
这一段是为了得到这一段,是为了得到id,title,rating_num,comment_num
('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>''.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>'
https://movie.douban.com/top250?start=25&filter=
一页,有25行。所以start=25时,表示下一页。
总共有10页,调取10次,就取完了。
flags有很多可选值:re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配任意字符,包括换行符 re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用 re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
flags
最常用的还是
re.S(DOTALL)点可以匹配任意字符,包括换行符
二、网络编程
1.楔子
你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢?
这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。
但是当你的a.py和b.py分别在不同电脑上的时候,你要怎么办呢?
类似的机制有计算机网盘,qq等等。我们可以在我们的电脑上和别人聊天,可以在自己的电脑上向网盘中上传、下载内容。这些都是两个程序在通信。
2.软件开发的架构
我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:
第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~
1.C/S架构
C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。
2.B/S架构
B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
3.网络基础
计算机网络的发展及基础网络概念
问题:网络到底是什么?计算机之间是如何通信的?
早期 : 联机
以太网 : 局域网与交换机
广播
主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
ip地址与ip协议
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
mac地址
head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。
mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
arp协议 ——查询IP地址和MAC地址的对应关系
广域网与路由器
路由器
局域网
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,172.16.10.1:10101100.00010000.00001010.000000001 255255.255.255.0:11111111.11111111.11111111.00000000 AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0172.16.10.2:10101100.00010000.00001010.000000010 255255.255.255.0:11111111.11111111.11111111.00000000 AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0 结果都是172.16.10.0,因此它们在同一个子网络。
例如
IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
总结:
三.网络基础B/S
B/S 有什么好?
统一了所有应用的入口手机端 为什么B/S没火起来统一了所有应用的入口 —— 微信C/S 架构 几乎包含了所有网络开发的架构形态
B/S 架构 也是C/S架构
B/S 架构中的client都是browser浏览器
统一了所有应用的入口 —— 趋势django tornado flask B/S 架构软件开发网络
底层的网卡 mac地址
局域网
交换机 : 同一个局域网内的机器之间的交流
路由器 : 跨局域网机器之间的交流
网关ip : 跨局域网的机器之间不能直接通信,只能通过网关ip通信
为什幺有局域网:
因为IP地址不够用全球的IP地址为0.0.0.0-255.255.255.255,它是有限的。192.168.*.* 内网的保留字段10.*.*.* 内网的保留字段172.16.*.*-172.31.*.* 内网的保留字段8位 2进制
asc码 只有 255 个
00000001 --> 1
ip地址代表了你在一个网络中的位置
是一个四位点分十进制
范围是 0.0.0.0 - 255.255.255.25511111111.1111111.1111111.1111111
mac地址唯一的,为什么要有ip地址?
192.168.11.***256台 0-255
192.168.***.***256^2
192.***.***.***256^3子网掩码网络地址ip和子网掩码ip做按位与运算 如果结果相同 那么说明在同一个网段内
#192.168.12.62
#11000000.10101000.00001011.00111110
#11111111.11111111.11111111.00000000
#11000000.10101000.00001011.00000000 == 192.168.0.0
#255.255.0.0#192.168.11.94
#255.255.0.0
11000000.10101000.00001011.01011110
11111111.11111111.11111111.00000000 == 192.168.0.0
python 全栈开发,Day32(知识回顾,网络编程基础)相关推荐
- 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5pycharm夜神
1.MongoDB回顾 1.启动 mongod - 改变data/db位置: --dbpath D:\data\dbmongod --install 安装windows系统服务mongod --rem ...
- Java基础知识回顾--网络编程基础
OSI参考模型 TCP/IP参考模型应用层 表示层 应用层会话层传输层 传输层网络层 网络层 数据链路层 物理+数据链路层物理层 IP协议 最大的贡献就是给大家提供了独一无二的IP地址. A类地址 8 ...
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件) 一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object):pass_registry ...
- python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...
2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...
- 学python有前途吗-Python全栈开发有前景吗,是否值得学习?
谢邀 一.什么是Python web全栈工程师? 全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人.也叫全端工程师(同时具备前端和后台能力),英文Full Stack developer. ...
- 参加python全栈开发培训需要多少钱?
python是一门高级的编程语言,也是非常受欢迎的编程语言,应用领域广泛.薪资待遇高,可以从业范围多,越来越多人都想要学习python,那么参加python全栈开发需要多少钱? 许多人对python的 ...
- 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...
简介 老男孩&路飞学城Python全栈开发重点班课程,作为Python全栈教学系列的重头戏,投入了全新的课程研发和教学精力,也是Python骑士计划的核心教学,由ALEX老师开班镇守,一线技术 ...
- python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)
python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性) 昨日内容回顾 1.app播放音乐plus.audio.createPlayer(文件路径/URL)player.play( ...
- python全栈开发要学些什么_战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
最新文章
- AppStore审核2.1被拒大礼包过审经历
- php 论坛_推荐一个基于话题的高性能轻型开源PHP论坛程序
- 阿里云物联网生活平台简介
- Android 中MVC实例之Activity,Window和View
- mysql主从1594错误_3分钟解决MySQL主从1594错误
- springmvc5.3 之后版本 舍弃AntPath地址匹配模式通配符 “**”用法改变。
- 不要给我说什么底层原理_连集合底层实现原理都不知道,你敢说 Redis 用的很溜?...
- 二十一天学通C语言:C语言中指针排序
- 用友t3服务器更改是哪个文件夹里,用友t3服务器地址变更
- 【数据库】三级模式两级映射详解
- 2022-nc-Widespread increasing vegetation sensitivity to soil moisture
- C++ 标准库的双向链表
- vnr光学识别怎么打开_SLS46CK4单光束安全传感器原版使用说明-Leuzeelectronic.PDF
- 头哥实践教学平台 CC++程序设计(计算机程序设计)基本输入输出
- Tsi721和NRS1800连接调试问题记录
- Web服务器群集——部署AWStats基于Apache的日志管理
- JAVA系列:SimpleDateFormat解析带T字符的时间格式( yyyy-MM-ddTHH:mm:sssZ )
- Clojure CLR 入门
- secureCRT 详细介绍
- 转-果壳网python工程师招聘启事