大数据学习笔记——Python基础(上)

一、Python知识点

1.变量&运算符

在这里插入图片描述

2.jupyter notebook常用快捷键

Esc 和 Enter 在命令和编辑模式之间跳转。

命令模式下:

A 键,将在选中单元格上方插入新单元格
B 键,将在选中单元格下方插入一个单元格

按两次D键,可以删除单元格

Z键,撤消已删的但与前各

Y键,将选中的单元格变成代码单元格

F键、弹出’查找和替换’菜单

编辑模式下:

Shift+Enter : 运行本单元,并选中下个单元

Ctrl+Enter : 运行本单元

Alt+Enter : 运行本单元,在其下插入新单元

3.输入输出

(1)
在这里插入图片描述
(2)
①*定义宽度、小数点精度

pi=3.141592653
print("pi = %.*f" % (3,pi))#用*从后面的元组中读取字段精度即3,结果:pi = 3.142 

②- 用做左对齐

pi=3.141592653
print('%-10.3f' % pi) #左对齐 结果:3.142

③+ 在正数前面显示加号( + )

pi=3.141592653
print('%+f' % pi) #显示正负号 结果:+3.141593 

④# 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
⑤0 显示的数字前面填充’0’而不是默认的空格

pi=3.141592653
print('%010.3f' % pi) #用0填充空白  
#000003.142  

⑥% ‘%%’输出一个单一的’%’
⑦(var) 映射变量(字典参数)
⑧m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
(3)结合format构造字符串

"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'

"{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'

"{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:format必须和字符串配套使用
在这里插入图片描述
(4)输入(input)

a = input("input:")
input:123                  # 输入整数
type(a)
<class 'str'>              # 字符串
4.Python内置数据类型

在这里插入图片描述

(1)list列表
list1 = [1, 2, 3, 4, 5, 6, 7 ]
print (list1[1:5])
#结果:  [2, 3, 4, 5]

#修改
list1 = [1, 2, 3, 4, 5, 6, 7 ]
list1[0] = 0
#list1 = [0, 2, 3, 4, 5, 6, 7 ]

#删除
list1 = [1, 2, 3, 4, 5, 6, 7 ]
del list1[0]
#list1 = [2, 3, 4, 5, 6, 7 ]

在这里插入图片描述

list1 = [1, 2, 3, 4, 5, 6, 7 ]
print(list1[1])   #2
print(list1[-1])  #7
print(list1[1:])  #[2,3,4,5,6,7]
list2 = [1, 2, 3, 4, [5,6,7]]
print(list1[4])     #[5,6,7]	嵌套

在这里插入图片描述
按tab键显示提示
在这里插入图片描述

(2)tuple元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

a=(1)#int类型
a=(1)#tuple类型  可用type验证


在这里插入图片描述

(3)dict字典

dict{k: v}

  • 由键 - 值对(key-value)组成的键(key)可以是任何类型,通常是数字或字符串

  • 字典的值(value)可以是任意Python的对象

  • 字典具有极快的查找速度(hash) ,类似于书本的索引、目录

  • 它的元素是无序的

  • 键值(key)不能重复出现

dict1 = {'Name': 'zhangsan', 'Age': 7, 'Class': 'First' }
print(dict1['Name'])   # zhangsan
print(dict1['Age'])    # 7
dict1['Age'] = 8    # 更新Age
dict1['Sex'] = "男"  # 添加信息
del dict1['Name'] # 删除键 'Name'
dict1.clear()     # 清空字典
del dict1        # 删除字典

在这里插入图片描述

(4)set集合
  • set和dict类似,也是一组key的集合,但不存储value

  • 由于键(key)不能重复,所以在set中没有重复的key

  • set可以看成数学意义上的无序和无重复元素的集合

  • 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

parame = {value01,value02,...}
set(value)
s.add( x ) #添加元素
s.remove( x )
#将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
#此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:
s.discard( x )
s.pop()#也可以设置随机删除集合中的一个元素

在这里插入图片描述

(5)其他类型
  • 空值 None

    空值是Python里一个特殊的值,用None、NULL表示

    None不是0,0是有意义的,而None是一个特殊的空值

  • 常量

    常量就是不能变的变量,通常用全部大写的变量名表示常量

    例: PI = 3.14159265359

    4.判断语句
if 5>4 :
    print('yes')
5.自动化控制
(1)条件语句
if 表达式:
    成立则执行这句
elif 表达式:
    成立则执行这句
else:
    不成立则执行这句
(2)循环语句(for)
l = [0, 1, 2, 3, 4]
for i in l:  #相当于for i in range(5):
  print(i)

for i in range(1, 10):
    print(i) #打印1~9

for i in range(1, 10, 2):
    print(i) #打印1 3 5 7 9 有换行

sum([i for i in range(1, 11)]) #配合内置函数

li = [[1, 2, 5], [3, 4, 7]]
li_new = []  #希望得到: li_new = [1, 2, 3, 4, 5, 7]
for i in li:
    li_new.extend(i)
li_new.sort()
print(li_new)
(3)循环语句(while)
while 判断条件:
    语句  #死循环按CTRL+C来退出
(4)pass 语句

pass是空语句,是为了保持程序结构的完整性。

    if student == 'xiaohong':
        pass   
(5) 语句流程图 Flow Chart

ProcessOn
https://processon.com/

6.函数
def hello():
    '''say hello''' #存放函数说明
    print('Hello')
    
def information(name,age):
    print('名字:',name)
    print('年龄:',age)
information(age = 12, name = '张三')#Python 解释器能够用参数名匹配参数值,相当于information('张三',12)

def information(name,age = 18):#定义默认参数,在调用时如果没有传入,则使用默认的参数进行运算
    print('名字:',name)
    print('年龄:',age)
information(name = '张三')

def calc(*args):#可变参数:传入的参数个数是可变的;加了星号 * 的参数会以元组(tuple)的形式导入
    sum = 0
    for n in args:
        sum = sum + n
    return sum
print(calc(1,2,3))#6
print(calc())#0

def info(a, **kw):#加了两个星号 的参数会以字典的形式导入
    print(a)#1
    print(kw)#{'name': '张三', 'age': 12}
info(1, name = '张三',age = 12)
7.变量作用域

变量作用域的关键字
global 引用全局
nonlocal 引用上层

二、网络爬虫

1.原理

爬虫模拟浏览器发送请求到服务器,即发送一个Request,服务器响 应,会得到一个Response,Response的内容便是所要获取的页面内容,类型一般为HTML,然后可以用正则表达式、网页解析库进行解析。最后把数据保存下来。

2.网页的基本构成
  • html(结构):是网页的核心部分,表示一个网页的结构。(房子架构)
    HTML语言:
<!DOCTYPE html><!--<!DOCTYPE html>指明版本信息-->
<html><!--HTML由<html>开始,</html>结束-->
<head>
    <!--告诉浏览器如何渲染页面-->
    <title>标题</title>
</head>
<body>
    <!--放置网站内容-->
    <h>正文标题及层次,一共可以写6层</h>
	<p>段落内容 </p>
	<div>文本块,相当于划分出来一块新的块</div>
	<img src='C:\Users\image3.jpg'></img>
    <a href='https://www.icourse163.org'>我是超链接</a>
</body>
</html>
  • css(样式):是网页的基础部分,将网页进行装饰美化。(墙和地板砖)
  • javascript(功能):是网页的功能部分,网页中主要的功能都在这实现。(家具)
3.requests的使用
import requests#导入requests
url='https://www.baidu.com/'
r = requests.get(url)#使用get方法请求数据
r.status_code#或r ,获得包含网页信息的响应数据
#返回结果:200	响应成功;30x	重定向;40x	网页找不到;50x	服务器内部错误(x可能为任何数字,一般常见的有304、403、404)
r.status_code  # 打印状态码
r.text        #以文本形式打印网页源码
r.url         # 打印请求url
r.headers      # 打印头信息
r.cookies      # 打印cookie信息
r.content      #以二进制形式打印数据
r.encoding     #打印编码方式
r.apparent_encoding# 打印备选编码方式
#常见的编码种类:ASCII	1字节	英文通用;GBK	2字节	中文汉字、兼容ascii;Unicode	2字节	通用编码规则、兼容ascii;UTF-8	1-6字节	可变长编码、汉字(3字节)注意:在Python3中默认采用UTF-8编码格式
#GBK和UTF-8对汉字编码区别:GBK编码时,一个汉字占2个字节,UTF-8编码时,一个汉字占3个字节。在以前很多中文网站都使用GBK编码,可以节省空间,而现在存储成本下降,为了统一编码格式,大多数网站都采用UTF-8编码
4、字符串解析常用函数

在这里插入图片描述

s = ' abcddbcaba '
s.strip()#去除首尾的空格、换行
s.strip('  ab')#'cddbc'
s.replace('a','A',2)#' AbcddbcAba '
s.split('d')#[' abc', '', 'bcaba ']  在字符转中有两个’d’,所以切了两刀,中间出现空字符串
s.split('d')[0]#' abc'   用split将字符串分隔,以’d’进行分隔,并只取切分后的第一段内容
#应用:
'苍天大树。'in r.text#true
raw_string=r.text.split('苍天大树。')[1].split('</span></p><div class="img-container">')[0]
5.Xpath的使用(数据解析)

在这里插入图片描述
(1)解析Xpath路径

import requests#导入requests
from lxml import etree#导入lxml

url='http://quotes.toscrape.com/'

r = requests.get(url)#使用get方法请求数据

r.status_code#或r ,获得包含网页信息的响应数据

data=etree.HTML(r.text)

#加[0]是为了直接获取中间的内容
word=data.xpath('/html/body/div/div[2]/div[1]/div[1]/span[1]/text()')[0]#利用Xpath来获取想要的网页内容
#结果:word  Out[6]: '“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”'
#可以一层一层的去找我们需要获取的内容,->div[1]->div[1]->span[1]->text() 最后使用text()方法将这个标签下的内容提取

(2)利用@获取属性标签里的内容
在这里插入图片描述

#使用了@itemtype来获取了属性标签itemtype里的内容
data.xpath('/html/body/div/div[2]/div[1]/div[1]/@itemtype')[0]
#Out[8]: 'http://schema.org/CreativeWork'

(3)利用// 取所有子元素

data.xpath('//div[@class="quote"]/@itemtype')
#Out[9]: ['http://schema.org/CreativeWork','http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork', 'http://schema.org/CreativeWork']
data.xpath('//div[@class="quote"]/@itemtype')[0]#取第一个符合条件的

(4)获取当前网页内容

import requests#导入requests
from lxml import etree#导入lxml

url='http://quotes.toscrape.com/'

r = requests.get(url)#使用get方法请求数据

data=etree.HTML(r.text)

total=data.xpath('/html/body/div[1]/div[2]/div[1]/div')#利用Xpath来获取想要的网页内容

save_list=[]

for info in total:
    quote=info.xpath('./span[1]/text()')[0]
    author=info.xpath('./span[2]/small/text()')[0]
    tags=info.xpath('./div[1]/meta/@content')[0]
    print(quote,author,tags)
    temp=quote+','+author+','+tags
    save_list.append(temp)

(5)保存网页内容

s='学习让我充实!'
f=open('123.txt','w')#用open函数操作文件,第一个参数为文件名(与代码同路径可以直接写文件名,不同写路径如'd:\\123.txt';f = open(r'd:\123.txt','r')如果文件不在当前文件夹下,需要添加路径,那么需要用到转义字符,在这里推荐在路径前加r),第二个参数为操作模式(见下图1)
f.write(s)#操作文件对象(见下图2)
f.close#有时候在写文件的时候会忘记加关闭操作会在内存中制造一些垃圾,在这里推荐直接用with open,程序会自动帮你关闭文件with open('123.txt','w') as f:
    #f.write(s)

图1
图2
(*6)Xpath的节点

<movie_rating> <!--1.文档节点,即根节点 -->
    <movie> <!--2.元素节点,属于<movie_rating>的子节点  -->
        <title lang="en">The Shawshank Redemption</title><!--3.lang="en" 为属性节点,<title>节点的属性  -->
        <!--4.The Shawshank Redemption 为文本节点  -->
        <director>Frank Darabont</director> 
        <year>1994</year><!--5.<title>/<director>/<year>元素节点  -->
    </movie>
</movie_rating>

参考: [https://www.icourse163.org/learn/kaopei-1207518810#/learn/announce]

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值