学习爬虫必备Python内置模块

time模块

# <1> 时间戳

>>> import time
>>> time.time()     
1493136727.099066

# <2> 时间字符串
>>> time.strftime("%Y-%m-%d %X") #%Y:年 %m:月 %d:天 %X:时分秒
'2017-04-26 00:32:18'

#<3> 程序暂定固定的时间
import time
print('正在下载数据......')
time.sleep(2) #程序暂定n秒
print('下载成功!')
import time
#计算一组程序执行的耗时
start = time.time()
#测试代码
num = 0
for i in range(10000000):
    num += 1
print(num)
##############################
print('总耗时:',time.time()-start)

可以利用时间模块分析程序所用时间,同时可以对网页爬取的时间进行格式化序列化

random模块

>>> import random
>>> random.random()      # 大于0且小于1之间的小数
0.7664338663654585
>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数
2
>>> random.randrange(1,3) # 大于等于1且小于3之间的整数
1
>>> random.choice([1,'23',[4,5]])  # 返回列表中的随机一个元素
1
>>> random.sample([1,'23',[4,5]],2) # 列表元素任意2个随机组合
[[4, 5], '23']
>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 直接将原来的列表元素打乱次序,不会返回一个新列表
>>> item
[5, 1, 3, 7, 9]

一般使用较多的就是random.random生成一个随机0-1的数,和random.choice在多线程里面用的比较多

os模块

import os

os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  # 改变当前脚本工作目录;相当于shell下cd
os.curdir   # 返回当前目录: ('.')
os.pardir  # 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')   # ***可生成多层递归目录
os.removedirs('dirname1')    # ***若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    #*** 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    # *** 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    # ***列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  #*** 删除一个文件
os.rename("oldname","newname")  #*** 重命名文件/目录
os.stat('path/filename') #  获取文件/目录信息
os.sep    # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    # 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    # 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  # 运行shell命令,直接显示
os.environ  # 获取系统环境变量
os.path.abspath(path)  # ***返回path规范化的绝对路径
os.path.split(path)  # 将path分割成目录和文件名二元组返回
os.path.dirname(path)  # 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) #  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) #  ***如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  # 如果path是绝对路径,返回True
os.path.isfile(path)  # ***如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  # ***如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  # 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  # 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) # ***返回path的大小

对目录对文件的操作来着找。

序列化模块:json(重点)

  • 序列化: 将python中的字典,列表对象转换成指定形式字符串
  • 反序列化:将指定格式的字符串转换成字典,列表对象
import json
dic = {
    'hobby':['football','pingpang','smoke'],
    'age':20,
    'score':97.6,
    'name':'zhangsan'
}
#序列化:将字典对象转换成了json格式的字符串
r = json.dumps(dic)
print(r)
import json

str = '{"hobby": ["football", "pingpang", "smoke"], "age": 20, "score": 97.6, "name": "zhangsan"}'
#反序列化:将字符串转换成了字典对象
dic = json.loads(str)
print(dic)
#持久化存储字典
import json
dic = {
    'hobby':['football','pingpang','smoke'],
    'age':20,
    'score':97.6,
    'name':'zhangsan'
}
fp = open('./dic.json','a')
#dump首先将dic字典进行序列化,然后将序列化后的结果写入到了fp表示的文件中
json.dump(dic,fp)
fp.close()
import json
fp = open('./dic.json','r')
#load将文件中的字符串数据进行读取,且将其转换成字典类型
dic = json.load(fp)
print(dic)
fp.close()

正则模块(重点)

  • 什么是正则表达式?

    • 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(例如,*,+,?等)。
    • 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
  • 常用的正则标识

正则详细规则一查表

单字符:
    . : 除换行以外所有字符
    [][aoe] [a-w] 匹配集合中任意一个字符
    \d :数字  [0-9]
   
数量修饰:
    * : 任意多次  >=0
    + : 至少1>=1
    ? : 可有可无  0次或者1{m} :固定m次 hello{3,}
    {m,} :至少m次
    {m,n} :m-n次
边界:
    $ : 以某某结尾 
    ^ : 以某某开头
分组:
		(ab)  
命名分组:
	  (?P<name>正则表达式),name是一个合法的标识符
贪婪模式: .*
非贪婪(惰性)模式: .*?

正则在python中的使用

  • 基于re模块进行正则匹配操作
  • 主要使用re模块中的findall进行指定规则的匹配
    • findall(str,rule)
      • str表示即将进行匹配的原始字符串数据
      • rule表示指定规则的正则表达式
      • findall返回的是列表,列表中存储匹配到的指定内容
import re

#提取170
string = '我喜欢身高为170的女孩'
ex = '\d+'
result = re.findall(ex,string)
print(result[0])
#####################################################################
#提取出http和https
key='http://www.baidu.com and https://boob.com'
ex = 'https?'
result = re.findall(ex,key)
print(result)
#####################################################################
import re
#提取出hello
key='lalala<hTml>hello</HtMl>hahah'
ex = '<hTml>(.*)</HtMl>'
result = re.findall(ex,key)
print(result)

#####################################################################
#提取出hit.
key='bobo@hit.edu.com'#想要匹配到hit.
# ex = 'h.*\.' #贪婪模式
ex = 'h.*?\.' #?将正则的贪婪模式调整为非贪婪模式。默认下为贪婪模式
result = re.findall(ex,key)
print(result)
#####################################################################
#匹配sas和saas
key='saas and sas and saaas'
ex = 'sa{1,2}s'
result = re.findall(ex,key)
print(result)
#####################################################################
key = '你好我的手机号是13222222222你记住了吗'
ex = '1[3,5,7,8,9]\d{9}'
result = re.findall(ex,key)
print(result)
#####################################################################
#提取ip和端口号
import re
s = "my computer ip is '230.192.168.78',and port is 8889 you got it?"
rep = re.search(r"ip is '(?P<ip>\d+\.\d+\.\d+\.\d+).* port is (?P<port>\d+)",s)
rep.group('ip'),rep.group('port')#通过命名分组引用分组

在这里插入图片描述

注:代码借鉴路飞

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值