补充
read() readlines() 默认值为-1 也可以指定值
requests
请求方式有
get 获取
post 写,增加
delete 删除
put 全量更新
patch 补丁更新
GET 和 POST
通过 requests 发送一个 GET 请求,需要在 URL 里请求的参数可通过 params(参数) 传递
与 GET 不同的是,POST 请求新增了一个可选参数 data,需要通过 POST 请求传递 body 里的数据可以通过 data 传递
requests.get.content(url)
处理文本请求
import requests
#处理文本请求
r = requests.get('https://www.xxx.xx/')
print()
print(r.text)#查看网页内容,因为是文本类型的,采用text查看
处理图片视频请求
import requests
url2='https:xxxxx/xxxx/xx/.jpg'
r2 = requests.get(url2)
r2.content#因为是图片类型的,采用content查看 ,文本也可以
with open('/tmp/aaa.jpg', 'wb') as fobj: # 将图片数据保存在文件aaa.jpg中
fobj.write(r2.content)
那就开始爬一些网站的图片吧
import requests,os,re
#下载源代码到本地
def download(url,fname):
with open(fname,mode="wb") as fw:
fw.write(requests.get(url).content)
#正则匹配所有图片的url地址
def get_url(fname,re_str):
result_url=[]
with open(fname,mode="r") as fr:
re_obj=re.compile(re_str)
for i in fr.readlines():
data=re_obj.search(i)
if data != None:
result_url.append(data.group())
return result_url
#遍历下载
if __name__ == '__main__':
fname= "/opt/mysina.html"
re_str="(http|https)://[\w\./-]+\.(jpg|png|jpeg|gif|bmp)"
if not os.path.exists("/opt/mysina.html"):
download("https://www.sina.com.cn/","/opt/mysina.html")
if not os.path.exists("/opt/mypics"):
os.mkdir("/opt/mypics")
list_url=get_url(fname,re_str)
for i in list_url:
if not os.path.exists("/opt/mypics/"+os.path.basename(i)):
download(i, "/opt/mypics/"+os.path.basename(i))
else:
print("这些文件你都已经有了,在:/opt/mypics/*****去看看")
json
搜索 中国天气网 城市代码查询, 查询城市代码
import requests
url="http://www.weather.com.cn/data/sk/101100801.html"
resp =requests.get(url)
print(resp.encoding)# 查看获取网页数据的字符集 'ISO-8859-1'
resp.encoding="utf8"#设置字符集为utf8
print(resp.encoding)
data=resp.json()# 查看json类型的数据【utf8】
print(data)
print(data["weatherinfo"]["city"])
print(data["weatherinfo"]["temp"])
print(data["weatherinfo"]["cityid"])
跳过反爬
搜索useragnet大全 让穿一个假的外套#通过构造头信息headers=header
import requests
url="https://www.jianshu.com/"
header = {"User-Agent":"Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"}
resp= requests.get(url,headers=header)
print(resp.text)
Pickle
数据持久化
pickle.dump(xxx,fr)存储
pickle.load(fr) 写入
import pickle
#持久化:数据落盘 放到磁盘中
list01=[10,"hehe",True]
# with open("/opt/list.txt",mode="wb") as fw:
# pickle.dump(list01,fw)
#读取数据
with open("/opt/list.txt",mode="rb") as fr:
data=pickle.load(fr)
print(data,type(data))
import pickle,os
#初始化
def init_data():
if not os.path.exists("/opt/"):
with open("/opt/user.data",mode="wb") as fw:
userdb = {}
pickle.dump(userdb,fw)
#userdb={"zs":"123","ls":"456"}
#注册
def register():
with open("/opt/user.data",mode="rb") as fr:
userdb=pickle.load(fr)
user=input("输入用户名:")
if user not in userdb.keys():
passwd = input("输入密码:")
userdb[user]=passwd
print("用户添加成功")
with open("/opt/user.data",mode="wb") as fw:
pickle.dump(userdb,fw)
else:
print("用户名已存在啊请重新输入")
#验证登录
def login():
with open("/opt/user.data",mode="rb") as fr:
userdb=pickle.load(fr)
user = input("输入用户名:")
passwd= input("输入密码:")
#if user in userdb.keys() and userdb.get(user) == passwd:
if (user,passwd) in userdb.items():
print("用户登录成功")
register()
else:
print("用户登录失败")
#输出用户
def print_user():
with open("/opt/user.data", mode="rb") as fr:
userdb = pickle.load(fr)
print(userdb)
#菜单
def show_menu():
while 1:
print("1.登录\n2.注册\n3.打印当前用户有哪些\n4.退出")
n=input("请输入你选择的事情:")
if n not in ["1","2","3"]:
print("按照套路出牌")
elif n=="1":
login()
elif n=="2":
register()
elif n == "3":
print_user()
else:
print("bye~!")
break
if __name__ == '__main__':
init_data()
show_menu()
你需要知道这些内容
1 什么是JSON?它的主要作用是什么?
JSON是一种轻量的数据交换格式,易读方便机器解析与生成 主要作用是将数据结构转换为字符串 或者将字符串转为相应的数据类型
2 如下代码所示,requests模块发送请求后,返回的数据可以用哪些方式进行读取?
r.text
r.content
r.json() 读取json格式的数据
3 HTTP的方法用哪些?
-
GET:请求获取Request-URI所标识的资源
-
POST:在Request-URI所标识的资源后附加新的数据
-
OPTIONS:请求与给定路径匹配的HTTP头的值
-
HEAD:请求服务器做好一切发送资源的准备,但是只发送头信息
-
DELETE:请求服务器删除Request-URI所标识的资源
-
PUT:请求服务器存储一个资源,并用Request-URI作为其标识
-
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
-
CONNECT:保留将来使用