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地址的对应关系

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 

广域网与路由器

路由器

路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽,"交通警察"。目前路由器已经广泛应用于各行各业,各种不同档次的产品已成为实现各种骨干网内部连接、骨干网间互联和骨干网与互联网互联互通业务的主力军。路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。  

局域网

  局域网(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

  

posted @ 2018-05-02 15:17 肖祥 阅读( ...) 评论( ...) 编辑 收藏

python 全栈开发,Day32(知识回顾,网络编程基础)相关推荐

  1. 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5pycharm夜神

    1.MongoDB回顾 1.启动 mongod - 改变data/db位置: --dbpath D:\data\dbmongod --install 安装windows系统服务mongod --rem ...

  2. Java基础知识回顾--网络编程基础

    OSI参考模型 TCP/IP参考模型应用层 表示层 应用层会话层传输层 传输层网络层 网络层 数据链路层 物理+数据链路层物理层 IP协议 最大的贡献就是给大家提供了独一无二的IP地址. A类地址 8 ...

  3. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件) 一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object):pass_registry ...

  4. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  5. 学python有前途吗-Python全栈开发有前景吗,是否值得学习?

    谢邀 一.什么是Python web全栈工程师? 全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人.也叫全端工程师(同时具备前端和后台能力),英文Full Stack developer. ...

  6. 参加python全栈开发培训需要多少钱?

    python是一门高级的编程语言,也是非常受欢迎的编程语言,应用领域广泛.薪资待遇高,可以从业范围多,越来越多人都想要学习python,那么参加python全栈开发需要多少钱? 许多人对python的 ...

  7. 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...

    简介 老男孩&路飞学城Python全栈开发重点班课程,作为Python全栈教学系列的重头戏,投入了全新的课程研发和教学精力,也是Python骑士计划的核心教学,由ALEX老师开班镇守,一线技术 ...

  8. python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)

    python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性) 昨日内容回顾 1.app播放音乐plus.audio.createPlayer(文件路径/URL)player.play( ...

  9. python全栈开发要学些什么_战争热诚的python全栈开发之路

    从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...

最新文章

  1. AppStore审核2.1被拒大礼包过审经历
  2. php 论坛_推荐一个基于话题的高性能轻型开源PHP论坛程序
  3. 阿里云物联网生活平台简介
  4. Android 中MVC实例之Activity,Window和View
  5. mysql主从1594错误_3分钟解决MySQL主从1594错误
  6. springmvc5.3 之后版本 舍弃AntPath地址匹配模式通配符 “**”用法改变。
  7. 不要给我说什么底层原理_连集合底层实现原理都不知道,你敢说 Redis 用的很溜?...
  8. 二十一天学通C语言:C语言中指针排序
  9. 用友t3服务器更改是哪个文件夹里,用友t3服务器地址变更
  10. 【数据库】三级模式两级映射详解
  11. 2022-nc-Widespread increasing vegetation sensitivity to soil moisture
  12. C++ 标准库的双向链表
  13. vnr光学识别怎么打开_SLS46CK4单光束安全传感器原版使用说明-Leuzeelectronic.PDF
  14. 头哥实践教学平台 CC++程序设计(计算机程序设计)基本输入输出
  15. Tsi721和NRS1800连接调试问题记录
  16. Web服务器群集——部署AWStats基于Apache的日志管理
  17. JAVA系列:SimpleDateFormat解析带T字符的时间格式( yyyy-MM-ddTHH:mm:sssZ )
  18. Clojure CLR 入门
  19. secureCRT 详细介绍
  20. 转-果壳网python工程师招聘启事

热门文章

  1. img图片加载失败选择默认替换图片
  2. Creatthread _Beginthread _Beginthreadex
  3. _beginthreadex 执行失败
  4. rabbitMQ第五种模型 --topic动态路由
  5. (2006) 农历节气
  6. 利用c语言编辑--钟表模拟程序(表针形式)
  7. 10件小事让你幸福至极
  8. apache 下载apk出错
  9. openlayers线面数据上图,底图为3857
  10. 聚类发展历史、现状、未来趋势