Python语法

0.Pycharm文件模板

# _*_ coding : UTF-8 _*_
# @Time : ${DATE} ${TIME}
# @Author : LinFeng
# @File : ${NAME}
# @Project : ${PROJECT_NAME}

1.注释

单行 #

多行 ''' '''

2.变量

2.1 变量类型

  • number

    • int(long)
    • float(double)
    • complex
  • boolean

    • True
    • False
  • string(char)

  • list(列表)数组?

    []

  • tuple(元组)

​ ()

  • dict(字典) 结构体?

​ {key:value}

2.2 查看变量类型

type()

2.3 命名规范

大小驼峰+下划线命名法

2.4 类型转换

  • int()
  • float()
  • bool()
  • str()

3.运算符

3.1 运算符类型

加减乘除 +-*/

整数除 //

取余 %

指数 **

多变量赋值 d,e,f = 1,2,3

逻辑运算符 and与(&&)or或(||)

4.输入输出

4.1 输出

  • %s 字符串
  • %d 整数

格式化输出

print('我的名字是%s,我的年龄是%d' % (name,age))

4.2 输入

vaule = input('请输入xxx:')

5.流程控制

5.1 if

不要漏:

if value > 18:
	print('xxxx')
elif value >30:
    print("aaaaa")
else:
    print('ddd')

5.2 for

for i in range(5) # 0-4
for i in range(5,10) # 左闭右开,5-9
for i in range(5,10,3) # (起始,结束,步长)

6.字符串操作

  • 获取长度:len
  • 查找:find
  • 判断:startswith,endswith
  • 出现次数:count
  • 替换内容:replace
  • 切割字符串:split
  • 修改大小写:upper,lower
  • 去空格:strip
  • 拼接:join

7.列表操作

7.1 添加

  • append(object) 追加
  • insert(index, object) 插入(注意index值为插入值的下标)
  • extend (Iterable迭代)似乎没什么用?

7.2 修改

通过下标[]=

7.3 查找

  • in
if food in foodList:
	print("ssss")
else :
	print("3333")
  • not in
if food not in foodList:
	print("ssss")
else :
	print("3333")

7.4 删除

  • del 根据下标来删除
del a_list[3]
  • pop() 删除最后一个元素
a_list.pop()
  • remove() 根据值删除
a_list.remove("ffff")

8.元组操作

  • 元组元素不可以被修改!!!!
  • 只有一个元素的元组需要在唯一的元素后面写,

9.切片

  • 语法

    注意!!!仍然是左闭右开区间

    • [起始:结束]
    • [起始:结束:步长]
    • [起始:]
    • [:结束]

10.字典操作

10.1 定义&访问

person = {'name':'李治','score':100000000000000}

# 访问
print(person['name'])
print(person['score'])

#######################
# print(person.score) 寄,达咩
#######################

## but
print(person.get('score')) #ojbk
#######################

# 关于报错
print(person['sex'])		# keyerror
print(person.get('sex'))	# None

10.2 修改

person['name'] = '法外狂徒'

10.3 添加

同修改,如果存在就修改,不存在就添加

person['name'] = '法外狂徒'
person['sex'] = 'We do not kown'

10.4 删除

  • del
del person['name']	# 删除key
del person			# 删除字典对象
  • clear
person.clear()		# 清空对象key,保留字典结构

10.5 遍历

# 1.遍历key
for key in person.keys():
	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)

11.函数

# 语法
def <函数名>(参数表):
	print("李治牛逼!!!!!!")
    print("李治我大哥!!!!!!")
    return <值>
################################  

# 传参
def sum(a,b)
# 1.位置传参
sum(11,55)
# 2.关键字传参
sum(b=11,a=55)

12.文件

12.1 打开&关闭

####### 打开 #######
fp = open('text.txt','w)
####### 写 #######
fp.write('hello\n'*3)
####### 读 #######
# 读一字节
content = fp.read()
# 读一行
content = fp.readline()
# 读完,以行分界组成列表
content = fp。readlines()
####### 关闭 #######
fp.close()
  • 文件路径

    • 绝对路径

    • 相对路径

      • text.txt 当前文件夹
      • ./text.txt 当前文件夹
      • ../text.txt上一级文件夹
      • demo/text.txt demo文件夹
  • 打开模式

    模式 可做操作 若文件不存在 是否覆盖文件原来内容
    r 只读 报错 ——
    r+ 可读、可写 报错
    w 只写 创建
    w+ 可读、可写 创建
    a 只写 创建 否,追加写
    a+ 可读、可写 创建 否,追加写

12.2 序列化与反序列化

  • 定义

    • 序列化:对象->字节序列

    • 反序列化:字节序列->对象

      使用JSON模块实现

  • 序列化

import json

fp = open('text.txt','w')
name_list = ['zs','lz']

# dumps()
names = json.dumps(name_list)
fp.write(names)
          
# dump()
json.dump(name_list,fp)
          
fp.close()

反序列化

import json

fp = open('text.txt','r')

# loads()
content = fp.read()
result = json.loads(content)

# load()
result = json.load(fp)

不加s的都????

13.异常

try:
    fp = oprn('text.txt','r')
    fp.read()
except FileNotFoundError:
    print('世界毁灭了!!!!!!')

HTML页面结构

<!--
	table	表格
	tr		行
	td		列

	ul li	无序列表
	ol li	有序列表
	a		超链接
-->

爬虫

0.防爬手段

  • User-Agent(用户代理)
  • 代理IP
    • 西次代理
    • 快代理
    • 透明代理:代理+真实IP
    • 匿名代理:代理
    • 高匿名代理:无
  • 验证码
    • 打码平台
    • 云打码平台
    • 超级✈
  • 动态加载网页(返回的是js数据并非真实数据)
    • selenium驱动浏览器发送请求
  • 数据加密
    • 分析js代码

1.urllib

1.1 基本用法&get方法

# _*_ coding : UTF-8 _*_
# @Time : 2023/2/28 18:56
# @Author : LinFeng
# @File : learn_urllib_base_01
# @Project : LearnSpider

import urllib.request

url = 'http://www.baidu.com'

# 发送请求
response = urllib.request.urlopen(url)

# response是HTTPResponse类型
print(type(response))

# 获取响应中的页面源码
# 因为read()方法获取的是字节编码的页面源码
# 故需要使用decode()方法进行解码
content = response.read().decode('utf-8')  # 按字节读
content = response.readline()  # 读一行
content = response.readlines()  # 按行读,每行组成列表

print(content)

# 返回状态码,200就对了!!
print(response.getcode())

# 返回url地址
print(response.geturl())

# 获取状态信息
print(response.getheaders())

1.2 下载_urlretrieve()方法

# _*_ coding : UTF-8 _*_
# @Time : 2023/2/28 19:17
# @Author : LinFeng
# @File : learn_urllib_download_02
# @Project : LearnSpider

import urllib.request

# 下载网页源码
url_page = 'http://www.baidu.com'
urllib.request.urlretrieve(url_page, 'baidu.html')

# 下载图片
url_img = 'https://pic2.zhimg.com/v2-a808ed8dd58234857734fcf3925b867d_250x0.jpg?source=172ae18b'
urllib.request.urlretrieve(url_img, '爬虫.jpg')

# 下载视频 现在好多防爬的视频网站啦,看看就好
# url_video = 'https://haokan.baidu.com/v?pd=wisenatural&vid=2126907687398950584'
# urllib.request.urlretrieve(url_video, 'shitVideo.mp4')

1.3 请求对象定制