# coding=utf-8 # py到了这里已经学的差不多了 # 当然还有内置函数,数据库,网络,多线程,以及图形化界面 # 后面的几天就看看这些 # 先讲一下网络,这方面可以用到爬虫,应该吧 # 图形化有软件,到时候我打算简单了解然后用软件,图形化界面软件 # print(''' 基本的网路知识 tcp/ip: 有ip,tcp两种协议。 ip是一种低级的路由协议,无法保证所有包抵达目的地,也不可以保证顺序 tcp是有连接的可靠的协议,可以保证数据包安全的按照发送时的顺序到达目的地 udp:无连接的不可靠的协议 ip:计算机在网路上逻辑的唯一标志地址 有v6和v4,v4是32为,v6是128位 本机地址:127.0.0.1,localhost 端口: 每一台计算机有多个网络通信程序运行,提供相关服务,比如在开抖音的同时聊qq 如果只有ip地址的话就不可以同时访问 所以端口出来了,就像是在一个叫做ip的房子上添加许多个叫端口的门 不同的要求通过不同的门进入,就可以解决只有一个ip的问题 http/https http无连接协议: 每一次用的时候请求连接,用完断开,不会一直占用网络资源 http1.1一共提供 八种 请求方法:options,get,post,put,head,delete,trace,connect https:加密的http,http通过80端口,而https通过433端口与tcp/ip通信 ''') print("*" * 80) print(''' http/https get方法:向指定资源发出请求,被发送的信息“显式”地跟着url后面 一般只是用于读取数据,比如静态图片 get方法就像是通过广播表白,爱意在明处,接触到的人都知道,因此没成功就尴尬的要死 ----------------- post方法:用于向指定的资源提交数据,请求服务器进行处理,比如提交表单,数据在请求体中 post就像小纸条,悄悄的爱她,不会尴尬,这很安全(如果传递的人不看的话) ''') print("*" * 80) print("*" * 80) import json print( ''' json数据,要用到内置的json库 对象(Object): 对象是由键值对组成的无序集合,键是字符串类型,值可以是任意 JSON 类型。 表示方式是使用大括号 {} 包裹,键值对以 key: value 形式表示,多个键值对使用逗号 , 分隔。 { "name": "Alice", "age": 30, "city": "New York" } Python 等价类型:dict(字典) 数组(Array): 数组是有序的元素集合,元素可以是任意 JSON 类型,使用方括号 [] 表示,多个元素用逗号 , 分隔。 [1, 2, 3, "four", {"key": "value"}] Python 等价类型:list(列表) 字符串(String): 字符串使用双引号 "" 包裹,内部的字符可以是字母、数字、符号等。 "Hello, world!" Python 等价类型:str(字符串) 数字(Number): 数字可以是整数或浮点数,不需要引号包裹。 42 3.1415 Python 等价类型:int(整数),float(浮点数) 布尔值(Boolean): 布尔值可以是 true 或 false,不使用引号包裹。 true false Python 等价类型:True,False 空值(Null): JSON 中的空值使用 null 表示,表示没有值。 null Python 等价类型:None JSON 数据类型总结: Object - Python 字典 Array - Python 列表 String - Python 字符串 Number - Python 整数或浮点数 Boolean - Python 布尔值 Null - Python 的 None ''' ) print("*" * 80) print(''' json.loads():将 JSON 字符串转换为 Python 对象(如字典、列表等)。 json.dumps():将 Python 对象转换为 JSON 字符串。 ------有s的不会修改原数据,而是返回一个新数据 json.load():从文件中读取 JSON 数据并转换为 Python 对象。 json.dump():将 Python 对象以 JSON 格式写入文件。 另外有变量.decode(‘编码’)这个函数可以转格式编码 ''') with open('test.json', 'w+') as f: json.dump({'key': 'value','key1': 'value','key2': 'value','key3': 'value'}, f) with open('test.json', 'r') as f: data = json.load(f) print(data) with open('test.json', 'r+') as f: data = json.load(f) print(data,"json") dataj=json.dumps(data) print(dataj) datap=json.loads(dataj) print(datap) print("*" * 80) print(''' 步骤: 1获取网页内容 Request库发送请求 2解析网页内容 beautifulsoup库解析网页内容 3存放与分析 ''') # 访问请求 # get方法:获得数据。post方法:创建数据 from bs4 import BeautifulSoup # 解析库 import requests # requests库 for i in range(0,250,25): res=requests.get(url=f"https://movie.douban.com/top250?start={i}",headers={'User-Agent':'Mozilla/5.0'}) # 通过get方法获取网页信息 # headers模仿科幻端发送请求 if res.ok: # 如果没报错.ok返回True # print(res.text) # 将返回资源进行txt处理 # print(res.status_code) # 获取状态码,2开头成功,3开头资源位置变了,4开头服务器有问题 soup=BeautifulSoup(res.text,'html.parser') # BeautifulSoup(待解析,解析器)返回一个html结构叔 # print(soup.p.string) # 通过.标签来访问标签,通过string来访问标签内文字 print(soup.img.get('src')) # get可以获取属性值 for title in soup.findAll('span',{'class':'title'}): title_text=title.string if "/" not in title_text: print(title_text) else: print(res.url) --------------------------------------------------------------------------------
下面是下载二进制文件的
--------------------------------------------------------------------------------
import requests # 引入请求库 from bs4 import BeautifulSoup # 引入处理库 response = requests.get(url='https://www.umeituku.com/meinvtupian/meinvxiezhen/', headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'}) # 获取响应数据 soup = BeautifulSoup(response.text, 'html.parser') # 解析html print(soup.img.get('src')) imgall = soup.findAll('img') # 获取所有图片节点数据 for img in imgall: # 循环所有节点 img_src = img.get('src') # 获取图片路径 img_d = requests.get(img_src) # 请求图片 with open(f'../img/{img.get('title')}.jpg', 'wb') as f: # 保存文件 f.write(img_d.content) # content 是 requests 库中的一种方法,用于获取响应的原始二进制数据。如果你要获取响应的内容而不是文本,可以使用 response.content