bs4解析实战——爬取优美图库的图片

代码:

import requests #出现问题时,试试选择其他解释器
from bs4 import BeautifulSoup
import time 
import os
if not os.path.exists("img"): #如果img目录不存在,则自动创建(img应直接在资源管理器的下一级)
    os.makedirs("img")

#获取主网页内容
url="https://www.umeituku.com/bizhitupian/meinvbizhi/"
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
resp=requests.get(url,headers=head)
resp.encoding='utf-8' #防止中文乱码
text=resp.text

#解析主网页内容
main_page=BeautifulSoup(text,"html.parser")
img_list=main_page.find("div",attrs={"class":"TypeList"}).findAll("img") #查找对应的语句
for img in img_list:
    src=img.get("src")
    if not src:  #注意为空时,不能执行,否则会出错
            print("图片链接为空,跳过")
            continue
    #下载图片
    img_resp=requests.get(src)
    img_name=src.split("/")[-1]
    with open("img/"+img_name,mode="wb") as f:
        f.write(img_resp.content)

    print(img_name+"已下载完成")
    time.sleep(1) #防止服务器崩溃

print("Over")


几个问题:

1、为什么在下载和保存图片时,使用 response.content 而不是 response.text?

response.content:

用途:用于获取响应的原始二进制内容,适用于图片、音频、视频等二进制文件

数据类型:返回字节序列(bytes 类型),这对于文件下载和保存是必需的

img_resp = requests.get(src)
img_data = img_resp.content  # 获取原始二进制数据
with open("img/" + img_name, mode="wb") as f:
    f.write(img_data)  # 写入二进制数据

response.text:

用途:用于获取响应的文本内容,适用于 HTML、XML、JSON 等文本数据

数据类型:返回字符串(str 类型),通常在处理网页内容、API 返回的数据时使用

编码response.text 会自动根据 response.encoding 进行解码,将字节数据转换为字符串

而二进制数据没有字符编码

response = requests.get(url)
html_content = response.text  # 获取网页的文本内容
with open("page.html", mode="w", encoding="utf-8") as f:
    f.write(html_content)  # 写入 HTML 文件

2、如何理解img_name = src.split("/")[-1]?

(1)src.split("/"):将 src(图片的 URL)按斜杠 / 分割成一个列表。

例如,对于 https://example.com/images/photo.jpgsrc.split("/")

结果会是 ['https:', '', 'example.com', 'images', 'photo.jpg']

(2)[-1]:获取列表中的最后一个元素

在上面的例子中,[-1] 结果是 'photo.jpg',即图片的文件名

在 Python 中,-1 是一个负索引,用于从序列(如列表、字符串)中从末尾开始访问元素。负索引的值表示从序列的最后一个元素向前计数的偏移量:

-1 表示最后一个元素

-2 表示倒数第二个元素

3、什么是os模块?

os 模块是 Python 的标准库之一,提供了与操作系统交互的功能。

你可以使用 os 模块来执行各种文件和目录操作、环境变量访问、路径操作等任务。

常用的 os 模块功能

  1. 文件和目录操作

    • os.makedirs(path, exist_ok=False):创建目录,包括所有必要的父目录。如果 exist_ok=True,则不会抛出异常如果目录已存在。
    • os.path.exists(path):检查指定路径是否存在。
    • os.path.join(path1, path2, ...):连接多个路径组件,生成一个正确的路径。
    • os.remove(path):删除指定的文件。
    • os.rmdir(path):删除指定的目录(目录必须为空)。
  2. 获取和修改路径信息

    • os.path.abspath(path):获取指定路径的绝对路径。
    • os.path.basename(path):返回路径的最后一个组件(文件名或目录名)。
    • os.path.dirname(path):返回路径的目录名部分。
  3. 环境变量和系统信息

    • os.environ:一个字典对象,包含当前用户环境变量。
    • os.getcwd():返回当前工作目录的路径。
    • os.chdir(path):改变当前工作目录到指定的路径。
  4. 进程和系统级操作

    • os.system(command):执行系统命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值