600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Python爬虫必备知识点--整理核心基础

Python爬虫必备知识点--整理核心基础

时间:2024-02-05 04:30:13

相关推荐

Python爬虫必备知识点--整理核心基础

Python爬虫基础语法相关

1. if条件判断

if 条件:

# 事情1

else:

# 事情2

2. while循环

while 条件:

循环体

3. 关于True和False

# 几乎所有能表示为空的东西. 都可以认为是False

print(bool(0))

print(bool(""))

print(bool([]))

print(bool({}))

print(bool(set()))

print(bool(tuple()))

print(bool(None))

4. 字符串

A. 索引和切片

索引, 就是第几个字符. 它从0开始.

切片, 从字符串中提取n个字符.

s = "我爱你"print(s[1]) # 爱print(s[0]) # 我print(s[2:4]) #从第2个, 到第4个(取不到4) --你

B.strip()

strip()可以去掉字符串`左右两端`的空白(空格, 换行\n, 回车\r, 制表符\t)

s = " \t\t\t 是的士大夫为我\r\r\n\n " # 够乱的字符串s1 = s.strip()print(s1) # 是的士大夫为我

C.split()

做切割的

s = "10,男人本色,100000万" # 你在网页上提取到这样的一段数据. 现在我需要电影名称tmps = s.split(",")name = tmps[1]print(name) # 男人本色id, name, money = s.split(",") # 切割后. 把三个结果直接怼给三个变量print(id)print(name)print(money)

D.replace()

replace, 字符串替换

s = "的\t\t\n\n属地往 32 师弟 " s1 = replace(" ", "").replace("\t", "").replace("\n", "")

E.join()

lst = ["我妈", "不喜欢", "黎明"] # 有时,由于网页结构的不规则, 导致获取的数据是这样的. s1 = "".join(lst) # 用空字符串把lst中的每一项拼接起来print(s1) # 我妈不喜欢黎明lst2 = ["\n\r","\n\r","周杰伦\n\r", "\n不认识我\r"] s2 = "".join(lst2).replace("\n", "").replace("\r", "")print(s2) # 周杰伦不认识我

F.f-string

s = "周杰伦"s1 = f"我喜欢{s}" # 它会把一个变量塞入一个字符串print(s1) # 我喜欢周杰伦k = 10085s2 = f"我的电话号是{k+1}" # 它会把计算结果赛入一个字符串print(s2) # 我的电话号是10086# 综上, f-string的大括号里, 其实是一段表达式.能计算出结果即可

5.列表

A. 索引, 切片

列表的索引和切片逻辑与字符串完全一致

lst = ["赵本山", "王大陆", "大嘴猴", "马后炮"]item1 = lst[2] # 大嘴猴item2 = lst[1] # 王大陆lst2 = lst[2:]print(lst2) # ["大嘴猴", "马后炮"]# 注意, 如果列表中没有数据. 取0会报错lst = []print(lst[0]) # 报错, Index out of bounds# 注意, 如果给出的索引下标超过了列表的最大索引. 依然会报错lst = ["123", "456"]print(lst[9999]) # 报错, Index out of bounds

B. 增加

给列表添加数据.

lst = [11,22]lst.append(33)lst.append(44)print(lst) # [11,22,33,44]

C. 删除

lst.remove("周润发")

D.修改

lst = ["赵本山", "王大陆", "大嘴猴", "马后炮"]lst[1] = "周杰伦"print(lst) # ["赵本山", "周杰伦", "大嘴猴", "马后炮"]

E.range和查询

for i in range(len(lst)):print(lst[i])# 循环列表的内容for item in lst:print(item)

6. 字典

A.增加/修改/删除

dic = {}dic['name'] = '樵夫'dic['age'] = 18print(dic) # {"name": "樵夫", "age": 18}dic = {"name": "樵夫", "age": 18}dic['age'] = 19print(dic) # {"name": "樵夫", "age": 19}dic = {"name": "樵夫", "age": 18}dic.pop("age")print(dic) # {'name': '樵夫'}

B. 查询

dic = {"name": "樵夫", "age": 18}a = dic['name'] # 查询'name'的值print(a) # 樵夫b = dic['age'] # 拿到dic中age对应的值print(b) # 18c = dic['哈拉少'] # 没有哈拉少. 报错d = dic.get("哈拉少") # 没有哈拉少, 不报错. 返回None. 它好. 它不报错嵌套!!dic = {"name": "樵夫", "age": 18}for k in dic: # 循环出所有的keyprint(k) print(dic[k]) # 获取到所有的value并打印dic = {"name": "王峰","age": 18,"wife": {"name": "章子怡","age": 19,},"children": [{'name':"胡一菲", "age": 19},{'name':"胡二菲", "age": 18},{'name':"胡三菲", "age": 17},]}# 王峰的第二个孩子的名字print(dic['children'][1]['name'])# 王峰所有孩子的名称和年龄for item in dic['children']:print(item['name'])print(item['age'])

7.字符集和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不是给人看的. 是给机器看的. 我们遇到的所有文字, 图片, 音频, 视频. 所有所有的东西到了计算机里都是字节.

8. 文件操作

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

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

9.关于函数

def get_page_source(url):print("我要发送请求了. 我要获取到页面源代码啊")return "页面源代码"pg_one = get_page_source("")pg_two = get_page_source("")def download_image(url, save_path):print(f"我要下载图片{url}了", f"保存在{save_path}")donwload_image("/abc/huyifei.jpg", "胡二飞.jpg")donwload_image("/aaa/dagedagefeifeifei.jpg", "大哥大哥飞飞飞.jpg")

10. 关于模块

第一种, python内置模块

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

第二种, 第三方模块

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

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

​ 直接导入就能用

导入模块的语法

import 模块from 模块 import 功能from 模块.子模块 import 功能import osimport sysfrom urllib.parse import urljoinfrom bs4 import BeautifulSoup

A. time 模块

B.os模块

C.json模块

D.random模块

import timetime.time() # 这个是获取到时间戳time.sleep(999) # 让程序暂停999秒import os# 判断文件是否存在os.path.exists() # 判断文件或者文件夹是否存在os.path.join() # 路径拼接os.makedirs()# 创建文件夹import jsons = '{"name": "jay", "age": 18}'dic = json.loads(s) #json字符串 => python字典print(type(dic))import jsondic = {"name": "jay", "age": 18}s = json.dumps(dic) #python字典 => json字符串print(type(s))import randomi = random.randint(1, 10) # 1~10的随机数print(i) # 多跑两次.效果更加

E.异常处理

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

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

try: # 尝试...print("假如, 我是一段爬虫代码, 请求到对方服务器")print("我得出事儿啊")print(1/0) # 出事儿了except Exception as e: # 出错了. 我给你兜着print(e) # 怎么兜? 打印一下. 就过去了print("不论上面是否出错. 我这里, 依然可以执行")while 1:try:我要发送请求了. 我要干美国CIA的总部. 我要上天print("我成功了!!")break # 成功了.就跳出循环except Exception as e:print("失败了")print("我不怕失败")print("再来")import timefor i in range(10):try:我要发送请求了. 我要干美国CIA的总部. 我要上天print("我成功了!!")break # 成功了.就跳出循环except Exception as e:print("失败了")print("我不怕失败")print("再来")time.sleep(i * 10)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。