爬虫基础-----1.python基础
第一节, 爬虫入门+python基础内容回顾.
一. 需要掌握的py基础
1. 基础语法相关
1.1 if循环
if 条件:# 事情1else:# 事情2当你需要判断的时候. 就去写if.
上面就是if的最基础的语法规则. 含义是, 如果条件为真, 去执行事情1
, 如果条件不真, 去执行事情2
。
1.2 while循环
while 条件:循环体
1.3. 关于True和False
# 几乎所有能表示为空的东西. 都可以认为是Falseprint(bool(0))print(bool(""))print(bool([]))print(bool({}))print(bool(set()))print(bool(tuple()))print(bool(None))# 上面这一坨全是False, 相反的. 都是真. 利用这个特性. 我们可以有以下的一些写法
2. 字符串
2.1. 索引和切片
索引, 就是第几个字符. 它从0开始。
切片, 从字符串中提取n个字符。
s = "我爱小明,小明爱我"print(s[1]) # 爱print(s[0]) # 我print(s[2:4]) 从第2个, 到第4个(取不到4) # 小明
2.2. strip()
strip()
可以去掉字符串左右两端
的空白(空格, 换行\n, 回车\r, 制表符\t)
s = " \t\t\t我的天哪\r\r \n\n " s1 = s.strip()print(s1) # `我的天哪`
2.3. split()
进行切割操作
s = "10,男人本色,100000万" tmps = s.split(",") # 根据逗号进行切分name = tmps[1]print(name) # 男人本色id, name, money = s.split(",") # 切割后. 把三个结果直接怼给三个变量print(id)print(name)print(money)
2.4. replace() 字符串替换
s = "我 \t\t\n\n爱 小 明 " s1 = replace(" ", "").replace("\t", "").replace("\n", "") # 干掉空格, \t, \nprint(s1) # 我爱小明
2.5 . 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) # 周杰伦不认识我
2.6. f-string
s = "周杰伦"s1 = f"我喜欢{s}" # 它会把一个变量塞入一个字符串print(s1) # 我喜欢周杰伦k = 10085s2 = f"我的电话号是{k+1}" # 它会把计算结果赛入一个字符串print(s2) # 我的电话号是10086
3. 列表
3.1. 索引, 切片
列表的索引和切片逻辑与字符串完全一致
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
3.2. append() 增加
给列表添加数据. append
lst = [11,22]
lst.append(33)
lst.append(44)
print(lst) # [11,22,33,44]
3.3. remove() 删除
lst.remove("周润发") # 把周润发删掉
3.4. 修改
对列表内容直接赋值,进行修改。
lst = ["赵本山", "王大陆", "大嘴猴", "马后炮"]
lst[1] = "周杰伦"
print(lst) # ["赵本山", "周杰伦", "大嘴猴", "马后炮"]
3.5. range
用for循环数数的一个东西
for i in range(10):print(i) # 从0数到9for i in range(5, 10):print(i) # 从5 数到 9
3.6. 查询(重点
)
lst = ["赵本山", "周杰伦", "大嘴猴", "马后炮"]
print(lst[0])
print(lst[1])
print(lst[2])
print(lst[3])# 循环列表的索引
for i in range(len(lst)):print(lst[i])
# 循环列表的内容
for item in lst:print(item)
4. 字典
字典可以成对儿的保存数据.
4.1. 增加
通过键值对的形式进行增加内容。
dic = {}
dic['name'] = '张三'
dic['age'] = 18print(dic) # {"name": "张三", "age": 18}
4.2. 修改
修改也是通过键值对直接赋值,进行修改内容。
dic = {"name": "张三", "age": 18}
dic['age'] = 19
print(dic) # {"name": "张三", "age": 19}
4.3. 删除(不常用)
使用.pop()
函数进行删除,一般不常用。
dic = {"name": "张三", "age": 18}
dic.pop("age")
print(dic) # {'name': '张三'}
4.4. 查询
dic = {"name": "张三", "age": 18}a = dic['name'] # 查询'name'的值
print(a) # 张三b = dic['age'] # 拿到dic中age对应的值
print(b) # 18c = dic['王小五'] # 没有哈拉少. 报错
d = dic.get("王小五") # 没有哈拉少, 不报错. 返回None. 它好. 它不报错
4.5.循环
dic = {"name": "张三", "age": 18}
for k in dic: # 循环出所有的keyprint(k) print(dic[k]) # 获取到所有的value并打印
4.6.嵌套
dic = {"name": "老王","age": 18,"wife": {"name": "翠花","age": 19,},"children": [{'name':"王小丫", "age": 19},{'name':"王二丫", "age": 18},{'name':"王三丫", "age": 17},]
}value = dic["老李"] # key不存在会报错
value = dic.get("老李") # 不会报错, 返回给你一个None# 老王的第二个孩子的名字
print(dic['children'][1]['name'])
# 老王所有孩子的名称和年龄
for item in dic['children']:print(item['name'])print(item['age'])
5. 字符集和bytes
字符集, 记住两个字符集就够了. 一个是utf-8
, 一个是gbk
. 都是支持中文的。
# 把字符串转化成字节
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)
6. 文件操作
python中. 想要处理一个文件. 必须用open()先打开一个文件
语法规则
f = open(文件名, mode="模式", encoding='文件编码')
f.read()|f.write()
f.close()
文件名:指需要打开文件的名称。
模式: 我们需要知道的主要有4个。 分别是: r, w, a, b。
- r 只读模式. 含义是, 当前这一次open的目的是读取数据。 所以, 只能读,不能写。
- w 只写模式. 含义是, 当前这一次open的目的是写入数据。所以, 只能写, 不能读。
- a 追加模式. 含义是, 当前这一次open的目的是向后追加。所以, 只能写, 不能读。
- b 字节模式. 可以和上面三种模式进行混合搭配. 目的是。写入的内容或读取的内容是字节。
encoding: 文件编码。一般使用utf-8 或者gbk。
另一种写法:
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)
7. 关于函数
在代码量很少的时候, 我们并不需要函数. 但是一旦代码量大了. 一次写个几百行代码. 调试起来就很困难. 此时, 建议把程序改写成一个一个具有特定功能的函数. 方便调试. 也方便代码的重用。
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")
总结, 函数的好处就是, 以后需要该功能. 不用再写重复代码了.
8. 关于模块
模块是啥? 模块就是已经有人帮我们写好了的一些代码, 这些代码被保存在一个py文件或者一个文件夹里. 我们可以拿来直接用
在python中有三种模块.
第一种, python内置模块
不用安装. 直接导入就能用
第二种, 第三方模块
需要安装. 安装后. 导入就可以用了
第三种, 自定义模块(新手先别自己定义模块)
直接导入就能用
导入模块的语法
import 模块
from 模块 import 功能
from 模块.子模块 import 功能举例子,
import os
import sys
from urllib.parse import urljoin
from bs4 import BeautifulSoup
搞爬虫.必须要了解的一些python内置模块。
8.1. time模块
import time
time.time() # 这个是获取到时间戳
time.sleep(999) # 让程序暂停999秒
8.2. os模块
import os
# 判断文件是否存在
os.path.exists() # 判断文件或者文件夹是否存在
os.path.join() # 路径拼接
os.makedirs() # 创建文件夹
8.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))
8.4. random模块
随机. 没别的用处.生成随机数
import random
i = random.randint(1, 10) # 1~10的随机数
print(i) # 多跑两次.效果更加
8.5. 异常处理
这个是重点. 我们在写爬虫的时候. 非常容易遇到问题. 但这些问题本身并不是我们程序的问题.。
try: # 尝试...print("假如, 我是一段爬虫代码, 请求到对方服务器")print("我得出事儿啊")print(1/0) # 出事儿了
except Exception as e: # 出错了. 我给你兜着print(e) # 怎么兜? 打印一下. 就过去了print("不论上面是否出错. 我这里, 依然可以执行")
看懂了么? 程序执行的时候. 如果try
中的代码出现错误. 则自动跳到except
中. 并执行except
中的代码. 然后程序正常的, 继续执行
有了这玩意. 我们就可以写出一段很漂亮的代码逻辑:
while 1:try:我要发送请求了. 我要干美国CIA的总部. 我要上天print("我成功了!!")break # 成功了.就跳出循环except Exception as e:print("失败了")print("我不怕失败")print("再来")
改良版:
import time
for i in range(10):try:我要发送请求了. 我要干美国CIA的总部. 我要上天print("我成功了!!")break # 成功了.就跳出循环except Exception as e:print("失败了")print("我不怕失败")print("再来")time.sleep(i * 10)
在写代码测试阶段. 不要加try…except… 要不然. 出错了. 你都不知道. 啥错了, 错哪儿了.
爬虫基础-----1.python基础相关推荐
- 二十一. Python基础(21)--Python基础(21)
二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性: #类.属性: 调用的就是类中的属性 #对象.属性: 先从自己的内存空间里找名 ...
- python语言的单行注释以井号开头_推荐|零基础学习Python基础知识
原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...
- day1 计算机基础以及python基础
day1 计算机基础以及python基础 1.cpu 内存 硬盘 操作系统 cpu:计算机的运算和计算中心,相当于人类的大脑 内存:暂时存储数据,临时加载数据应用程序.一般有4G.8G.16G.32G ...
- 爬虫学习笔记-python基础+urllib
目录 一.Python基础知识回顾 1.pip下载源 2.pycharm设置作者信息 3.python注释 4.变量 4.1 类型转换 4.2 字符串函数 find函数 startswith和ends ...
- python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...
原标题:Python基础语法精心总结!看完都知道的可以往下继续学习了 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 1. input 用户自己输入值 2. print 打印值 可 ...
- python基础代码-python基础,python基础代码大全
Python是现在非常流行的编程语百言,也是四大编程语言之一,而且Python具有简单.易学.上手容易.功能强大等优势,非度常适合零基础人员学习,也是问初学者的首要选择. 而对于初学Python入门时 ...
- python基础指令-python基础语法,python 代码命令大全
python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...
- python常用代码大全-python基础,python基础代码大全
Python是现在非常流行的编程语百言,也是四大编程语言之一,而且Python具有简单.易学.上手容易.功能强大等优势,非度常适合零基础人员学习,也是问初学者的首要选择. 而对于初学Python入门时 ...
- 【数据分析师-python基础】python基础语法精讲
python基础语法精讲 1 从数字开始 1.1 理解整数.浮点数.复数几种类型对象 1.2 掌握运算及其相关的常用函数 2 变量.表达式和语句 2.1 变量作用及定义的方法 2.2 变量命名原则和习 ...
最新文章
- pcss评分_GTA5画质设置 N卡画质选项设置指南
- RabbitMQ五种模式
- 根据坐标如何标记图片_推荐收藏 | 一文搞定SCI论文图片
- 掉电引起的ORA-1172错误解决过程(二)
- SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
- Hello JavaFX 2.0:命令行介绍
- MyBatis学习笔记(三) 关联关系
- Docker监控:基于阿里云容器服务构建自己的Docker监控框架
- 125条常见的java面试笔试题大汇总3
- java面试第十七天
- CSS的50个代码片段
- 爬虫:Python爬虫学习笔记之网页解析基础——爬取360导航栏目
- AjaxControltoolkit学习笔记—ListSearch 使用详解
- python人名最多数统计_《利用Python进行数据分析》-全美婴儿姓名案例
- Oracle书籍推荐
- 运算放大器(运放)选型、参数分析以及应用OPA2350
- 如何提高工作效率,提高工作效率的方法?
- 批处理程序文件夹加密
- ESP32 LVGL8.1 ——event 事件 (event 17)
- Smart Git Assume Unchanged
热门文章
- 在线sql进行Excel表格拆分
- 【时光隧道——使用Html、JavaScript等实现(附源代码)】
- MATLAB编写用户登陆界面小结——更改界面左上角图标、输入用户名提醒和输入密码隐藏
- 程序员的一天:一寸光阴一寸金
- 计算机专业学什么代码,计算机科学与技术专业代码,本科计算机科学与技术专业代码查询...
- Android拍摄raw照片,这20款摄影APP,让你的照片飞上天!
- echarts动态渲染柱状图背景颜色以及顶部数值
- mysql 设置所有ip均可访问(windows版本设置)
- 金蝶EAS DEP脚本(1)—— 基本概念
- 苹果M3处理器跑分曝光 Max性能提升24%