python-3
#1
# # sys模块是用于与解释器交互的模块
# import sys
# # 获取解释器中"环境变量"的路径
# print(sys.path)
# print(type(sys.path))
# #将需要加载的路径添加到解释器的环境变量中
# # sys.path.append('需要加载的路径')
#
#
# # os是一个用于与 操作系统交互的模块
# # 比如可以通过它获取 本地电脑 某个文件夹的路径
# import os
# #需求:将爬取下来的图片,保存到固定的目录中
# #比如"当前项目试行文件"目录下的files文件中
#
# #获取当前执行文件的目录
# self_dir=os.path.dirname(__file__)
# print(self_dir)
#
# #获取项目根目录
# base_path=os.path.dirname(self_dir)
# print(base_path)
#
# #路径的拼接 存放图片的文件夹
# image_path=os.path.join(base_path,'image_files')
# print(image_path)
#2
'''
Json:是一种第三方数据格式,他的出现是为了让所有语言产生的数据实现共享
1.如果没有Json数据格式,会怎么样?
-python常用数据类型:
-int/float/str/list/tuple/dict/set/bool
-Java数据类型:
-没有list/dict
-list-->数组
-dict-->hash值{key:value}
问题:导致数据无法共享,什么语言产生的数据,只能提供给该语言来使用
2.Json数据格式的原理:
注意:文本文件中只能存放字符串类型的数据
-序列化:
python数据类型-->Json数据格式-->str字符串类型-->存放文本文件中
-(单纯是Json数据格式无法写入文本文件中,所以需要由Json转换成str字符串类型)
-反序列化:
将数据从文本文件中读取出来-->str字符串类型-->Json数据格式-->python数据格式
-(其他语言要想使用,则将Json数据格式转换为其他语言的数据类型)
解决:解决数据无法共享问题,实现各种语言产生的数据共享。
3.Json数据如何产生
-注意:Json数据格式与python中的dict区别
-dict:{'name':'tank'} #单引号或双引号
-json:{"name":"tank"} #json数据中只有双引号
-json模块
-import json
-序列化:
1)产生python的数据格式
2)通过json模块将python数据转为Json格式的字符串
3)再将json格式的字符串写入 文本文件中(硬盘)
-反序列化:
1)将数据从json文件中 读取出来,得到json格式的字符串
2)通过json模块将json格式字符串-->json数据-->python数据类型
4.json模块的序列化与反序列化方法:
-序列化方法:
json.dumps() #将python数据格式————>json数据格式的字符串
json.dump() #将python数据格式-->json数据格式的字符串-->内部还会将json字符串写入硬盘
with open(json文件,模式,字符编码) as f:
json.dump(python数据,f句柄)
该方法内部
-反序列化方法:
json.loads()
json.load()
#json.load(f句柄)
#load()内部发生的事情:
#1.内部自动执行 f.read()方法来将json格式的字符串读取出来
#2.将json格式字符串 自动 转换为 python数据格式
#file-->str-->json_str-->dict
'''
# import json
#
# #序列化:
# # 1)产生python的数据格式
# # python中的字典数据
# # user_info={'name':'张三','age':'18','sex':'male'}
# # print('字典数据:',user_info)
# # print('python数据类型',type(user_info))
#
# # 2)通过json模块将python数据转为Json格式的字符串
# # json_data=json.dumps(user_info)
# # print('json数据:',json_data)
# # print('json模块转换后的类型',type(json_data))
#
# #3)再将json格式的字符串写入 文本文件中
# #打开一个以.json后缀的文本文件,将数据以wt的模式写入到文件中
# # with open('uesr_info.json',mode='wt',encoding='utf-8') as f:
# # # 将json数据写入 user_info.json文件中
# # f.write(json_data)
# # print('数据写入完毕...')
#
#
# # #反序列化:
# # # 1)将数据从json文件中 读取出来,得到json格式的字符串
# # with open('uesr_info.json',mode='r',encoding='utf-8') as f:
# # json_str=f.read
# # print('json格式字符串:',json_str,type(json_str))
# # # 2)通过json模块将json格式字符串-->json数据-->python数据类型
# # user_info=json.loads(json_str)
# # print('json-->python数据:',user_info,type(user_info))
# #
# # #获取名字
# # print(user_info.get('name'))
#
#
# #解决显示的中文数据格式问题
# user_info2={'name':'张三','age':'18','sex':'male'}
# #{"name": "\u5f20\u4e09", "age": "18", "sex": "male"}
# #json_data=json.dumps(user_info2) #默认指定的编码是ASCII,所以无法展示中文
#
# #解决:为了展示中文,可以将默认的ASCII取消掉
# #默认:ensure_ascii=True--->ensure_ascii=False
# json_data=json.dumps(user_info2,ensure_ascii=False)
# print(json_data)
#4 json.dump()与json.load()
#import json
#
# #序列化:
# # 1)产生python的数据格式
# # python中的字典数据
# user_info={'name':'张三','age':'18','sex':'male'}
# print('字典数据:',user_info)
# print('python数据类型',type(user_info))
#
# #2)通过json模块将python数据转为Json格式的字符串
# #打开一个以.json后缀的文本文件,将数据以wt的模式写入到文件中
# with open('uesr_info2.json',mode='wt',encoding='utf-8') as f:
# # 将json数据写入 user_info.json文件中
# #json.dump(python数据,f句柄)
# #该方法内部会做两件事情
# #1.会将python数据转换为json数据格式的字符串 2.自动执行 f.write(json格式的字符串)
# json.dump(user_info,f)
# print('数据写入完毕...')
#反序列化:
# 1)将数据从json文件中 读取出来,得到json格式的字符串
# with open('uesr_info2.json',mode='r',encoding='utf-8') as f:
# #json.load(f句柄)
# #load()内部发生的事情:
# #1.内部自动执行 f.read()方法来将json格式的字符串读取出来
# #2.将json格式字符串 自动 转换为 python数据格式
# #file-->str-->json_str-->dict
# user_info2=json.load(f)
# print(user_info2)
# print(type(user_info2))
#3
import
os
'''
hashlib模块:
hashlib是一个加密模块,内部集成了所有的加密算法。
-最常用的加密算法是:
-MD5:
-RSA:
-base256:
-在开发中,有时候需要对一些隐私数据进行加密,比如密码加密。
'''
# import hashlib
# import json
#
# #定义密码加密函数
# def get_md5_pwd(pwd):
#
# #1)获取加密对象--> md5_obj
# md5_obj=hashlib.md5()
#
# #2)通过 update()方法将密码做一个加密处理
# md5_obj.update(pwd.encode('utf-8'))
#
# #3)加密成功后,则将加密后的字符串返回
# return md5_obj.hexdigest() #注意:hexdigest()需要加括号
#
# #9fe720581dcde5eab041673b9883da9f
# #e807f1fcf82d132f9bb018ca6738a19f
# res=get_md5_pwd('1234567890')
# print(res)
#
# #注册功能
# #函数定义
# def register():
# #1)让用户输入 用户名与密码
# username=input('please input you username:').strip()
# #2)密码需要输入两次
# password=input('please input you password:').strip()
# re_password=input('please input you password again:').strip()
#
# #3)校验用户输入的两次密码是否一致
# if password==re_password:
#
# #调用密码加密函数,给密码加密处理
#
# password=get_md5_pwd(password)
#
# #4)若两次密码一致,则创建一个 用户字典数据
# user_dict={
# 'username':username,
# 'password':password
# }
#
# #5)将字典 数据,存放到json文件中
# file_name='%s.json' % (username,)
# with open(file_name,'w',encoding='utf-8') as f:
# json.dump(user_dict,f,ensure_ascii=False)
#
# print('register successful!')
#
# else:
# print('两次密码不一致,注册失败!')
# #函数调用
# register()
#注册功能
#函数定义
# def login():
# #1)让用户输入 用户名与密码
# username=input('请输入用户名:').strip()
# password=input('请输入密码:').strip()
#
# #给用户输入的明文密码做一个加密处理
# password=get_md5_pwd(password)
# print(password)
#
# #2)先将用户的json文件数据“读取”出来
# #2。1)若用户的json文件不存在,则打开文件会报错
# file_path= '%s.json' % username
# #2。2)先判断用户文件是否存在,若不存在则退出登录功能
# #通过 os.path.exists(文件路径)-->判断文件路径是否存在
# #若存在返回True,否则返回False
# if os.path.exists(file_path):
# with open(file_path,'r',encoding='utf-8') as f:
# user_dict=json.load(f)
# print(user_dict)
# #3)判断用户输入的
# if username==user_dict.get('username') and password == user_dict.get('password'):
# print('登录成功...')
# else:
# print('登录失败...')
#
# #若文件不存在,则打印用户不存在
# else:
# print('用户不存在!')
#
# login()
#4
'''
-第三方模块
openpyxl模块:
-是用于 操作Excel文件的模块
-创建exc文件,
-打开exc文件,修改,并保存。
-下载与安装
-打开terminal-->在pycharm中打开你的终端窗口
-输入:
#通过国内源下载模块
pip3 install -i
https://
pypi.tuna.tsinghua.edu.cn
/simple
openpyxl
'''
#1.创建Excel文件,并写入内容
from
openpyxl
import
Workbook
#创建Excel一个类
#2.创建一个Excel文件时,会默认自带一个“sheet表格”
wb_obj=Workbook()
#print(wb_obj.active)
#3.新建一个表格--> create_sheet('新建表格的名字')
table1=wb_obj.create_sheet(
'表格1'
)
table2=wb_obj.create_sheet(
'表格2'
)
table3=wb_obj.create_sheet(
'表格3'
)
#4.想要给三张表格 填充数字,给每一列填充 1-100整数
# table1['A1']=100
# table2['B1']=200
# table3['C1']=300
for
line
in
range(1,101):
#1-100的整数,每次循环都会赋值一次给line
#A1-A100 填充1-100整数
table1[
'A%s'
% line]=line
#B1-B100 填充1-100 的2次方
table1[
'B%s'
% line]=line*line
#C1-C100 填充1-100 的3次方
table1[
'C%s'
% line]=line**3
#line值的3次方
#D1-D100 填充1-100 的10次方
table1[
'D%s'
% line]=line**10
#line值的10次方
#4.创建完表格后,需要调用save('Excel文件名')生成Excel文件
wb_obj.save(
'创建exce初体验.xlsx'
)
#5
'''
-什么是爬虫?
-爬虫指的是爬虫数据,如果想要爬取数据,
就必须与网络打交道,因为数据是通过"互联网(网络)"获取的。
1.什么是互联网?
#网络设备:(比如:网线、路由器、交换机、网线、防火墙等硬件组成的)
互联网其实就是由一堆网络设备,将世界各地所有的计算机都连接在一起,
形成一张大网,这个大网就是"互联网";
2.建立互联网的目的?
-没有互联网:(坏处)
-没有互联网,获取数据非常的难。
-8、90年代,中国黄页:相当于一本各行各业的介绍书。
-有互联网的好处:
-只需要在电脑前,通过鼠标打开浏览器,通过浏览器输入网址,
直接访问目标网址的数据,获取想要的内容。
互联网简历的目的为了“数据的共享”与“数据的传递”
3.什么是上网?
ps:服务器(与我们平时的电脑没太大区别,硬件设备比我们平常的电脑要高级许多)
ps:目标网站(想要访问的网站链接)
-上网的过程(获取数据的过程)
上网其实是通过浏览器,向目标网址"服务器"发送请求,
服务器会将网站数据,通过网络返回给请求过来的电脑上的浏览器
然后浏览器会将数据渲染到浏览器上。
4.获取数据的两种方式
-正常普通用户:
1.通过"浏览器"发送请求
2.下载页面代码与数据
3,将下载回来的数据渲染到浏览器中
4.手动复制粘贴,保存数据。
-爬虫程序(高效获取数据):其实我们在py文件中写的python代码
1.伪装成浏览器(目的是为了欺骗服务器,我们是一个正常的用户)
2.下载页面代码与数据(会将网站服务器所有数据加载回来)
-问题:整个网页中可能只有几个数据是我想要的,其他数据我并不想要,
-若将所有 需要与不需要的数据都保存到硬盘,会大量占用硬盘空间,浪费资源。
-解决:资源浪费问题,通过“解析模块”对所有数据进行筛选过滤,只获取有价值的数据。
3.解析网页数据,并提取有价值的内容
4.通过"文件读取/数据库"将有价值的数据保存到硬盘中。
5.爬虫总结:
-爬虫的比喻:
互联网就像一张蜘蛛网,爬虫程序就是一个蜘蛛,然后沿着蜘蛛网(网络)爬取猎物(数据);
-爬虫的定义:
是一个“伪装成浏览器,向目标网站发送请求,获取响应数据,并解析提取有价值的数据”的程序。
-爬虫的价值:
我们可以将互联网中的数据比喻成一座宝藏,那爬虫程序就是挖取宝藏的人。
通过技术手段,去获取数据,数据就是money。
-淘宝/京东/拼多多:最有价值的是商品信息。
-通过爬虫程序去获取"商品信息",就可以获取利益。
6.爬虫的基本原理:
1)发送请求
-requests请求库
-selenium请求库/自动化测试库
2)获取数据
-只要服务器通过校验,即可返回
3)解析数据
-re(效率极低)---> 正则模块
-bs4--->BeautifulSoup解析库
-selector--->通过属性选择器查找数据的解析库
-Xpath--->底层xml,通过文档查找数据的解析库
4)保存数据
-文本保存
-数据库保存
-关系型数据库
-sql server
-mysql(******)
-非关系型数据库
-redis缓存数据库
-MongoDB(******)
-爬虫领域使用最多的存储库
'''
#华为:了解
#手机占特别小的市场份额。
#基站(技术遥遥领先其他国家)才是华为最大的市场份额。
#2G\3G-->通过电缆将地区与基站连接在一起
#4G\5G-->不通过电缆来发射,类似声波的一种传输,比如我们生活中的WiFi。
#在美国:其实很多人都是住在郊区,基本上每家每户都是住在比较偏的一个地方,自己盖房子。
#在美国,若使用电缆将每家每户连接在一起,成本会非常非常高。