python基础下

字符集和bytes

字符集, 记住两个字符集就够了. 一个是utf-8, 一个是gbk. 都是支持中文的. 但是utf-8的编码数量远大于gbk. 我们平时使用的最多的是utf-8

# 把字符串转化成字节
bs = "我的天哪abcdef".encode("utf-8")
print(bs)  #  b'\xe6\x88\x91\xe7\x9a\x84\xe5\xa4\xa9\xe5\x93\xaaabcdef'
# 一个中文在utf-8里是3个字节. 一个英文是一个字节. 所以英文字母是正常显示的

# 把字节还原回字符串
bs = b'\xe6\x88\x91\xe7\x9a\x84\xe5\xa4\xa9\xe5\x93\xaaabcdef'
s = bs.decode("utf-8")
print(s)
记住, bytes不是给人看的. 是给机器看的. 我们遇到的所有文字, 图片, 音频, 视频. 所有所有的东西到了计算机里都是字节.

文件操作

python中. 想要处理一个文件. 必须用open()先打开一个文件

语法规则

f = open(文件名, mode="模式", encoding='文件编码')
f.read()|f.write()
f.close()

模式: 我们需要知道的主要有4个. 分别是: r, w, a, b

  1. r 只读模式. 含义是, 当前这一次open的目的是读取数据. 所以, 只能读. 不能写

  2. w 只写模式. 含义是, 当前这一次open的目的是写入数据. 所以, 只能写, 不能读

  3. a 追加模式. 含义是, 当前这一次open的目的是向后追加. 所以, 只能写, 不能读

  4. b 字节模式. 可以和上面三种模式进行混合搭配. 目的是. 写入的内容或读取的内容是字节.

encoding: 文件编码. 只有处理的文件是文本的时候才能使用. 并且mode不可以是b. 99%的时候我们用的是utf-8

另一种写法:

with open(文件名, mode=模式, encoding=编码) as f:
    pass

这种写法的好处是, 不需要我们手动去关闭f

读取一个文本文件:

with open("躺尸一摆手.txt", mode="r", encoding="utf-8") as f:
    for line in f:  # for循环可以逐行的进行循环文件中的内容
        print(line)

关于函数

在代码量很少的时候, 我们并不需要函数. 但是一旦代码量大了. 一次写个几百行代码. 调试起来就很困难. 此时, 建议把程序改写成一个一个具有特定功能的函数. 方便调试. 也方便代码的重用

def 函数名(形式参数):
    # 函数体
    return 返回值

上面是编写一个函数的固定逻辑. 但是, 编写好的函数是不会自己运行的. 必须有人调用才可以

函数名(实际参数)

例:

def get_page_source(url):
    print("我要发送请求了. 我要获取到页面源代码啊")
    return "页面源代码"

pg_one = get_page_source("baidu.com")
pg_two = get_page_source("koukou.com")

再来一个

def download_image(url, save_path):
    print(f"我要下载图片{url}了", f"保存在{save_path}")

donwload_image("http://www.baidu.com/abc/huyifei.jpg", "胡二飞.jpg")
donwload_image("http://www.baidu.com/aaa/dagedagefeifeifei.jpg", "大哥大哥飞飞飞.jpg")

总结, 函数的好处就是, 以后需要该功能. 不用再写重复代码了.

关于模块

模块是啥? 模块就是已经有人帮我们写好了的一些代码, 这些代码被保存在一个py文件或者一个文件夹里. 我们可以拿来直接用

在python中有三种模块.

第一种, python内置模块

不用安装. 直接导入就能用

第二种, 第三方模块

需要安装. 安装后. 导入就可以用了

第三种, 自定义模块(新手先别自己定义模块)

直接导入就能用

导入模块的语法

import 模块
from 模块 import 功能
from 模块.子模块 import 功能

举例子,
import os
import sys
from urllib.parse import urljoin
from bs4 import BeautifulSoup

1.time模块

import time
time.time()  # 这个是获取到时间戳
time.sleep(999)  # 让程序暂停999秒

2.os模块

import os
# 判断文件是否存在
os.path.exists()  #  判断文件或者文件夹是否存在
os.path.join()    # 路径拼接
os.makedirs()     # 创建文件夹

3.json模块(重中之重)

现在的网站不同于从前了. 习惯性用json来传递数据. 所以, 我们必须要知道json是啥, 以及python如何处理json.

json是一种类似字典一样的东西. 对于python而言, json是字符串.

例如,

s = '{"name": "jay", "age": 18}'

就是json

如何来转化它.

json字符串 => python字典

 

import json
s = '{"name": "jay", "age": 18}'
dic = json.loads(s)
print(type(dic))

python字典 => json字符串

 

import json
dic = {"name": "jay", "age": 18}
s = json.dumps(dic)
print(type(s))

4.random模块

随机. 没别的用处.生成随机数

import random
i = random.randint(1, 10)  # 1~10的随机数
print(i)   # 多跑两次.效果更加

5.异常处理

这个是重点. 我们在写爬虫的时候. 非常容易遇到问题. 但这些问题本身并不是我们程序的问题.

比如, 你在抓取某网站的时候. 由于网络波动或者他服务器本身压力太大. 导致本次请求失败. 这种现象太常见了. 此时, 我们程序这边就会崩溃. 打印一堆红色的文字. 让你难受. 怎么办?

我们要清楚一个事情. 我们平时在打开一个网址的时候. 如果长时间没有反应, 或者加载很慢的时候. 我们习惯性的会刷新网页. 对吧. 这个逻辑就像: 程序如果本次请求失败了. 能不能重新来一次. 这个异常处理. 就是干这个事儿的.

try: # 尝试...
    print("假如, 我是一段爬虫代码, 请求到对方服务器")
    print("我得出事儿啊")
    print(1/0)  # 出事儿了
except Exception as e:  # 出错了. 我给你兜着
    print(e)  # 怎么兜?  打印一下. 就过去了
    
print("不论上面是否出错. 我这里, 依然可以执行")

程序执行的时候. 如果try中的代码出现错误. 则自动跳到except中. 并执行except中的代码. 然后程序正常的, 继续执行

 

有了这玩意. 我们就可以写出一段很漂亮的代码逻辑:

import time
for i in range(10):
    try:
        我要发送请求了.
        print("我成功了!!")
        break  # 成功了.就跳出循环
    except Exception as e:
        print("失败了")
        print("我不怕失败")
        print("再来")
        time.sleep(i * 10)

在写代码测试阶段. 不要加try...except... 要不然. 出错了. 你都不知道. 啥错了, 错哪儿了.

 

posted @   星尘yuan  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示