Python基础

文章目录

  • Python基础
    • pip指令
    • 注释
    • 变量类型
    • 命名规范
    • 类型转换
    • 运算符
      • 算数运算符
      • 赋值运算符
      • 复合赋值运算符
      • 比较运算符
      • 逻辑运算符
    • 输入输出
      • 输出
      • 输入
    • 流程控制语句
    • 数据类型高级
      • 字符串高级
      • 列表高级
      • 元组高级
      • 切片
      • 字典高级
    • 函数
      • 函数的定义和调用
      • 函数的参数
      • 函数的返回值
      • 函数的局部变量和全局变量
    • 文件
      • 文件的打开与关闭
      • 文件的读写
      • 序列化和反序列化
    • 异常
  • 爬虫
    • urllib库使用
      • 基本使用
      • 一个类型和六个方法
      • 下载
      • 请求对象的定制
      • 编解码
      • ajax的get请求

pip指令

使用pip管理Python包

  • pip install<包名> 安装指定的包
  • pip uninstall<包名> 删除指定的包
  • pip list 显示已经安装的包

修改pip下载源
pip install 包名 -i 国内源地址
如:pip install ipython -i https://pypi.douban.com/simple(豆瓣)

注释

  • 单行注释:#
  • 多行注释:‘’‘’‘’

变量类型

  • 整型(int):a=1
  • 浮点型(float):b=1.1
  • 字符串类型(string):c=‘1’ /c=“1”
  • 布尔类(boolean):d=True
  • 列表(list):e=[1,2,3]
  • 元组(tuple):f=(1,2,3)
  • 字典(dictionary):g={name:“zhangsan”,age:1}

查看变量(x)的数据类型
type(x)

命名规范

  1. 标识符有字母、数字和下划线组成,且数字不能开头
  2. 严格区分大小写
  3. 不能使用关键字

驼峰命名法

如:uesrName

类型转换

  • int(x):将字符串和浮点型转换为整型,"123.456"和"12ab"都为非法字符不能被转换成整数
  • float(x):将整型和字符串转换成浮点型
  • str(x):将整型和浮点型转换成字符型,而布尔型会转换为"True"
  • bool(x):如果对非零的整数/浮点数(包含正数和负数)进行bool类型转换,那么全都是True; 只要字符串(包括空格)/列表/元组/字典中有"内容",那么强制类型转换为bool的时候,就返回True,否则为False

运算符

算数运算符

+,-,*,/,//【取整除】,%,**【指数】,()【小括号,用于提高运算级】

拓展:
字符串的加法是对字符串进行拼接
在python中,+两端都是字符串才可以进行加法运算
字符串的乘法,是将字符串重复多少次

赋值运算符

多个变量赋值(使用逗号分隔) 如:a,b,c=1,2,3

复合赋值运算符

+=,-=,*=,/=,//=,%=,**=

比较运算符

比较运算符返回的都是boolean类型的数据
==,!=,<,>,>=,<=

逻辑运算符

and,or,not(同与,或,非)

逻辑运算符性能提升
当and前面的结果是false的情况下,那么后面的代码就不执行了(如a=39,a<10 or print(‘hello world’) 左边判断为false,则右边不执行)
or,只要有一方为true,那么结果就是true(如a=39,a>37 or print(‘hello world’) 左边判断为true,则右边不执行)

输入输出

输出

#普通输出
print('')#格式化输出
age=18
name='zhangsan'
# %s 代表的是字符  %d 代表的是数值
print('我的名字是%s,我的年龄是%d' % (name,age))

输入

input(‘’)

注:input返回的是字符串类型

流程控制语句

if 要判断的条件:条件成立时,要做的事if 判断条件:判断条件为true时执行的代码
else:判断条件为false时执行的代码if 判断条件:判断条件为true时执行的代码
elif 判断条件:判断条件为true时执行的代码
...
elif 判断条件:判断条件为true时执行的代码
else:以上判断全为false时执行的代码#for循环 格式: for 变量 in 要遍历的数据:
#                  方法体
#i是字符串中一个又一个的字符变量
#s代表的是要遍历的数据
s='china'
for i in s:print(i)#range(5) 0~4
#range(1,6) 1~5
#range(起始值,结束值)
#range(1,10,3)
#range(起始值,结束值,步长)
#1 4 7
for i in range():print(i)#遍历列表
a_list=['zjl','ljj','tz']
for i in range(len(a_list)):print(a_list[i])

数据类型高级

字符串高级

字符串的常见操作

  • 获取长度:len len函数可以获取字符串的长度
    len(s)
  • 查找内容:find 查找指定内容在字符串中是否存在,如果存在就返回该内容在字符串中第一次出现的开始位置索引值,如果不存在,则返回-1
    s.find('x')
  • 判断:startswith,endswith 判断字符串是不是以谁谁开头/结尾
    s.startswith('x')
  • 计算出现次数:count 返回str在start和end之间在mystr里出现的次数
    s.count('x')
  • 替换内容:replace 替换字符串中指定的内容,如果指定次数count,则替换不会超过count次
    s.replace('a','b') #将a全部替换为b
  • 切割字符串:split 通过参数的内容切割字符串
    s.split('x')
  • 修改大小写:upper,lower 将字符串中的大小写互换
    s.upper()
  • 空格处理:strip 去空格
    s.strip()
  • 字符串拼接:join 字符串拼接
    s.join('x')

列表高级

添加元素

  • append 在末尾添加元素 list.append('x')
  • insert 在指定位置插入元素list.insert(1,'x')
  • extend 合并两个列表 list1.extend(list2)

修改元素
list[1]='x'

查找元素

  • in(存在)如果存在那么结果为true,否则为false
if x in list:...
else:...
  • not in(不存在),如果不存在那么结果为true,否则false
if x not in list:...
else:...

删除元素

  • del:根据下标进行删(爬取的数据中,有个别的数据,是我们不想要的,那么我们就可以通过下标的方式来删除)
    del list[x]
  • pop:删除最后一个元素
  • remove:根据元素(列表中的元素而不是下标)的值进行删除

元组高级

python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号
定义只有一个元素的元组,需要在唯一的元素后写一个逗号

切片

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 切片的语法:【起始:结束:步长】,也可简化使用【起始:结束】
注意:选取的区间从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身),步长表示选取间隔。

s='hello world'
s[0] # h
s[0:4] # hell
s[1:] # ello world
s[:4] # hell
s[0:6:2] # hlo

字典高级

查询

person={'name':'吴签','age':28} # 定义一个字典
person['name'] # 访问person的name
person.get('name') # 访问person的name

修改

person={'name':'吴签','age':28} # 定义一个字典
person['name']='法外狂徒' # 将name值修改

添加

person={'name':'吴签'}
person['age']=18 # 给字典添加一个新的key(如果这个键在字典中不存在,那么就会变成新增元素)

删除

person={'name':'吴签','age':28}
#del
#1)删除字典中指定的某一个元素
del person['age']
#2)删除整个字典
del person
#clear
#清空字典中所有数据,但是保留字典对象
person.clear()

遍历

# 1)遍历字典的key
for key in person.key():print(key)
# 2)遍历字典的value
for value in person.values():print(value)
# 3)遍历字典的key和value
for key,value in person.items():print(key,value)
# 4)遍历字典的项/元素
for item in person.items():print(item)

函数

函数的定义和调用

# 定义函数
def 函数名():代码# 调用函数
函数名()

函数的参数

def sum(a,b):c=a+bprint(c)
# 位置参数 按照位置一一对应的关系啦传递参数
sum(1,2)
# 关键字传参
sum(b=200,a=100)
  • 定义时小括号中的参数,用来接收参数用的,称为“形参”
    sum(a,b) #定义函数的时候
  • 调用时小括号中的参数,用来传递给函数用的,称为“实参”
    sum(1,2) #调用函数的时候

函数的返回值

函数的局部变量和全局变量

局部变量:在函数内部定义的变量
特点:其作用域是函数内部,而函数的外部是不可以使用
全局变量:定义在函数外部的变量
特点:可以在函数的外部使用,也可以在函数的内部使用

文件

文件的打开与关闭

打开/创建文件 使用open函数,可以打开一个已经存在的文件,或者创建一个文件 open(文件路径,访问模式) f=open('test.txt','w')

说明:
文件路径

  • **绝对路径:**指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的
    例如:E:\python,从电脑的盘符开始,表示的就是一个绝对路径。
  • **相对路径:**是从当前文件所在的文件夹开始的路径。
    test.txt,是在当前文件夹查找test.txt文件
    ./test.txt,也是在当前文件夹里查找test.txt文件,./表示的是当前文件夹。
    ../test.txt,从当前文件夹的上一级文件夹里查找 test.txt文件。../表示的是上一级文件夹。
    demo/test.txt,在当前文件夹里查找demo这个文件夹,并在这个文件夹里查找test.txt文件。
#创建一个test.txt文件
#模式: w 可写
#      r 可读
open('test.txt','w')#打开文件
fp=open('test.txt','w')
fp.write('hello world')#文件的关闭
fp.close()

文件的读写

#写数据
#write方法
fp=open('test.txt','w')
fp.write('hello world,i am here\n' * 5)
fp.close()#再次运行这段代码,如果文件存在,会先清空原来的数据,然后再写
#如果模式变成了a,那么就会执行追加的操作#读数据
fp=open('test.txt','r')
#默认情况下,read是一字节一字节的读,效率比较低
content=fp.read()
print(content)#readline是一行一行的读取,但是只能读取一行
content=fp.readline()#readlines可以按照行来读取,但是会将所有的数据都读取到,并且以一个列表的形式返回,而列表是一行一行的数据
content=fp.readlines()

序列化和反序列化

通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。

设计一套协议,安装某种规则,吧内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。

#序列化的2种方式
#dumps()
fp=open('test.txt','w')
name_list=['zs','ls']
#导入json模块到该文件中
import json
#序列化,将python对象变成json字符串
#我们在使用scrapy框架的时候,该框架会返回一个对象,我们要将对象写入到文件中,就要使用json.dumps=
names=json.dumps(name_list)
fp.write(names)
fp.close()#dump
#在将对象转换为字符串的同时,指定一个文件的对象,然后把转换后的字符串写入到这个文件里
fp=open('test.txt','w')
name_list=['zs','ls']
import json
#相当于names=json.dumps(name_list)和fp.write(names)
json.dump(name_list,fp)
fp.close()#反序列化
#将json字符串变成一个python对象
fp=open('test.txt','r')
content=fp.read()
#loads
import json
result=json.loads(content) #load
import json
result=json.load(fp)
fp.close()

异常

#异常的格式
try:可能出现异常的代码
except 异常的类型友好的提示#例如
try:fp=open('test.txt','r')fp.read()
except FileNotFoundError:print('系统正在升级,请稍后再试。。。')

爬虫

urllib库使用

基本使用

#使用urllib来获取百度首页的源码
import urllib.request#1)定义一个url 就是你要访问的地址
url='http://www.baidu.com'#2)模拟浏览器向服务器发送请求
response=urllib.request.urlopen(url)#3)获取响应中的页面源码
#read方法 返回的是字节形式的二进制数据
#要将二进制数据转换为字符串
#二进制-->字符串 解码 decode('utf-8')
content=response.read().decode('utf-8')#4)打印数据
print(content)

一个类型和六个方法

url='http://www.baidu.com'
#response是HTTPResponse类型
response=urllib.request.urlopen(url)#安照一个字节一个字节的去读
response.read()
#返回多少个字节
response.read(5)
#读取一行
response.readline()
#每次读取一行,直到读完
response.readlines()#返回状态码
response.getcode()
#返回url地址
response.geturl()
#获取状态信息
response.getheaders()

下载

import urllib.request#下载网页
url_page='http://www.baidu.com'
#url代表的是下载路径 filename文件的名字
urllib.request.urlretrieve(url_page,'baidu.html')#下载图片
url_img='...'
urllib.request.urlretrieve(url=url_img,filename='....jpg')
#下载视频
url_video='...'
urllib.request.urlretrieve(url_video,'....mp4')

请求对象的定制

请求对象的定制为了解决反爬的第一种手段

headers={'User-Agent':...}
request=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(request)

编解码

get请求方式:
urllib.parse.quote()

import urllib.request
import urllib.parse
url='https://www.baidu.com/s?wd='
headers={'User-Agent':...}#请求对象的定制
request=urllib.request.Request(url=url,headers=headers)#将周杰伦三个字变成Unicode编码格式
#需要依赖于urllib.parse
name=urllib.parse.quote('周杰伦')url=url+name#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)#获取相应内容
content=response.read().decode('utf-8')#打印数据
print(content)

urllib.parse.urlencode()

#应用场景:多个参数的时候
#https://www.baidu.com/s?wd=周杰伦&sex=男
import urllib.parse
data={'wd':'周杰伦''sex':'男''location':中国台湾省}
a=urllib.parse.urlencode(data)
print(a) #获取https网页源码
import urllib.request
import urllib.parsebase_url='https://www.baidu.com/s?'new_data=urllib.parse.urlencode(data)url=base_url+new_dataheaders={'User-Agent': ...}#请求对象的定制
request=urllib.request.Request(url=url,headers=headers)#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)#获取网页源码的数据
content=response.read().decode('utf-8')#打印数据
print(content)

post请求方式

url='https://fanyi.baidu.com/sug'headers={'User-Agent':...}data={'kw':'spider'}#post请求的参数,必须要进行编码
data=urllib.parse.urlencode(data).encode('utf-8')#post请求的参数 ,是不会拼接在url后面的,而是需要放在请求对象定制的参数中
#post请求的参数,必须要进行编码
request=urllib.request.Request(url=url,data=data,headers=headers)#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)#获取响应的数据
content=response.read().decode('utf-8')import json
obj=json.loads(content)
print(obj)

post请求方式的参数,必须编码
编码之后,必需调用encode方法
参数是放在请求对象定制的方法中

ajax的get请求

#ajax的get请求豆瓣电影第一页
#获取豆瓣电源的第一页的数据,并且保存起来
import urllib.request
url='https://movie.douban.com/j/search_subjects?type=movie&tag=可播放&sort=recommend&page_limit=20&page_start=0'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0'}#1)请求对象的定制
request=urllib.request.Request(url=url,headers=headers)
#2)获取响应数据
response=urllib.request.urlopen(request)
content=response.read().decode(utf-8)
#3)下载数据到本地
#open方法默认情况下使用的是gbk编码,如果我们想保存汉字,那么需要在open方法中指定编码格式为utf-8
fp=open('douban.json','w',encoding='utf-8')
fp.write(content)#ajax的get请求豆瓣电影第十页
#page   1   2   3   4
#start  0   20  30  40
#start (page-1)*20#1)请求对象的定制
#2)获取响应的数据
#3)下载数据import urllib.parse
import urllib.request
def create_request(page):base_url='https://movie.douban.com/j/search_subjects?type=movie&tag=可播放&sort=recommend&'data={'page_limit':20,'page_start':(page-1)*20}data=urllib.parse.urlencode(data)url=base_url+dataheaders={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0'}request=urllib.request.Request(url=url,headers=headers)return requestdef get_content(request):response=urllib.request.urlopen(request)content=response.read().decode('utf-8')def down_load(page,content):with open('douban_'+str(page)+'.json','w',encoding='utf-8')as fp:fp.write(content)
#程序的入口
if __name__=='__main__':page_start=int(input('请输入起始的页码'))page_end=int(input('请输入结束的页码'))for page in range(page_start,end_start+1):#每一页都有自己的请求对象定制create_request(page)#获取响应数据get_content(request)#下载down_load(page,content)

Python爬虫(学习笔记)相关推荐

  1. python爬虫学习笔记 3.9 (了解参考:训练Tesseract)

    python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...

  2. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  3. python爬虫学习笔记3.2-urllib和request练习

    python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...

  4. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  5. python爬虫学习笔记2模拟登录与数据库

    前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...

  6. Python爬虫学习笔记总结(一)

    〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大家可以 ...

  7. 一入爬虫深似海,总结python爬虫学习笔记!

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  8. 一入爬虫深似海,总结python爬虫学习笔记! 1

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  9. Python爬虫学习笔记:概念、知识和简单应用

    Python爬虫:概念.知识和简单应用 什么是爬虫? 使用的开发工具 一个简单的爬虫实例 Web请求过程分析 HTTP协议 请求头中的重要内容 响应头中的重要内容 请求方式 requests 安装 G ...

  10. python爬虫学习笔记一:网络爬虫入门

    参考书目 <python网络爬虫从入门到实践>唐松 第一章 网络爬虫入门 1.1 robots协议 举例:查看京东的robots协议 京东robots协议地址 User-agent: * ...

最新文章

  1. postgres清理pg_xlog
  2. oracle trunc()函数用法
  3. 【机器学习-西瓜书】四、决策树:信息熵;信息增益;增益率;ID3;C4.5
  4. 阿里云推出企业级智能协同办公方案 云桌面、云AP、云客服一应俱全
  5. Autodesk AutoCAD 2022 产品系列已发布(附下载)
  6. 无线通信(1)-无线通信链路结构
  7. cad插入块_如何实现CAD图纸块的插入及合并操作
  8. CVPR2020|3D目标检测算法推荐论文源码大盘点
  9. gateway断言工厂Path,Weight
  10. Windows 修改桌面Desktop的默认路径为D盘
  11. 前端学习路线(简洁清晰,直击学习途径)
  12. node.js+小程序基于微信小程序的校园失物招领系统毕业设计源码072343
  13. 计算机主机后面的usb哪个不可接入,电脑主机上的USB介面前面有两个,后面有四个,但是只能用两个...
  14. wireshark/The NPF driver isn’t running./Unable to load WinPcap (wpcap.dll)
  15. http://p.codekk.com/
  16. 系统性能评价---性能评估
  17. 什么是网站ICP备案,什么样的网站需要办理ICP?
  18. 定调!深度解读央行DC/EP数字货币在28省市深化试点背后的逻辑
  19. 这个世界没好过-虚拟采访鲁迅先生
  20. Android系统预置文件

热门文章

  1. Eureka健康机制检查问题之一创建EurekaDiscoveryClientConfiguration$EurekaHealthCheckHandlerConfiguration错误
  2. 博客系统(cnblog)
  3. .jar和sources.jar及javadoc.jar三者的关系
  4. PPT: 解决“很抱歉 powerpoint 无法读取“的问题
  5. 电脑检测软件列表及电脑硬件驱动大全
  6. 将十进制数对应的八进制、十六进制、十进制数输出
  7. What is RSS?
  8. 模拟幅度调制系统抗噪声性能
  9. Tomcat集成eclipse
  10. SeaJS 是什么?