常用模块
re模块
说明:在pyhton中要想使用模块,必须借助模块,re就是其中之一
findall,search,match方法的对比:
方法 | 查找内容 | 返回值 | 无数据 | 结果空group() |
---|---|---|---|---|
re.findall | 根据正则匹配除所有符合条件的数据 | 对象列表 | 空列表 | 无此方法 |
re.search | 根据正则匹配到一个符合条件的就结束 | 结果对象 | None | 直接报错 |
re.match | 根据正则从头开始匹配(必须在开头匹配上) | 结果对象 | None | 直接报错 |
案例:正则实战案例
# 利用正则爬取红牛所有的分公司信息:http://www.redbull.com.cn/about/branch
import re
with open(r'data', 'r', encoding='utf8') as f:
res = f.read()
company_name = re.findall('<h2>(.*?)</h2>',data) # data里面存放的是网页源代码
print(company_name)
collections模块
# 该模块中提供了一些高级模块
1.具名元组 namedtuple
结构:namedtuple('名称',[名字1,名字2,……,名字n]) # 名字间用逗号隔开
namedtuple('名称',[名字1 名字2 名字3 …… 名字n]) # 名字间用空格隔开
定义:point = namedtuple('肤色','黄种人 黑人 白人')
# '黄种人 黑人 白人'也可以写在列表里,用逗号隔开
传值:res = point('小明','jack','Tom')
返回值:print(res) # 肤色(黄种人='小明', 黑人='jack', 白人='Tom')
取值:print(res.黄种人) """千万不要加引号,一加就错了"""
2.双端队列 deque
from collections import deque
l1 = deque([1, 3, 5, 6])
res = l1.append(333)
l1.appendleft(22)
print(l1)
print(l1.pop())
print(l1.popleft())
3.有序字典 OrderedDict
4.默认值字典 defaultdict
5.计数器: Counter # 统计字符串中每个元素的出现的个数
from collections import Counter
res = 'hgjkashkjasdhgkjghnh'
res1 = Counter(res)
print(res1)
# Counter({'h': 5, 'g': 3, 'j': 3, 'k': 3, 'a': 2, 's': 2, 'd': 1, 'n': 1})
queue
队列 queue
import queue
q = queue.Queue() # 初始化队列
q.put('1') # 存值
q.put('2')
q.put('3')
print(q.get()) # 取值
print(q.get())
print(q.get())
print(q.get()) # 值取没了就会原地等待
"""满足先进先出的原则"""
time模块
1.时间的三种表现形式:
<1> 时间戳:以秒数的形式呈现 time.time() # 1637830736.696676
<2> 格式化时间:用来给人看的
time.strftime('%Y-%m-%d') # 2021-11-25
time.strftime('%Y-%m-%d %H:%M:%S') # 2021-11-25 11:48:34
time.strftime('%Y-%m-%d %X') # 2021-11-25 11:48:34
<3> 结构化时间:用来给机器看的 time.localtime()
# time.struct_time(
tm_year=2021,
tm_mon=11,
tm_mday=25,
tm_hour=16,
tm_min=59,
tm_sec=30,
tm_wday=3,
tm_yday=329,
tm_isdst=0)
5.三种表现形式之间的转换
时间戳>>>结构时间: time.gmtime(时间戳时间)
datetime模块
# datetime.date(年,月,日)
date = datetime.date(2020, 11, 25) # 2020-11-25
# datetime.date.today()系列
res = datetime.date.today() # 2021-11-25
# datetime.datetime.today()系列
res1 = datetime.datetime.today() # 2021-11-25 16:28:53.862682
res2 = datetime.datetime.today().year # 2021
res3 = datetime.datetime.today().month # 11
res4 = datetime.datetime.today().day # 25
res5 = datetime.datetime.today().weekday() # 3 (星期是0-6,周一是0)
res6 = datetime.datetime.today().isoweekday() # 4 (星期是1-7,周一是1)
# datetime.timedelta(days=8) # 8 days, 0:00:00
""" 可进行运算:
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象 """
# 其他
res7 = datetime.datetime.now() # 2021-11-25 16:28:53.862681
res8 = datetime.datetime.utcnow() # 2021-11-25 08:28:53.862681