py第七天:爬虫与网络请求

# 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值