python-bs4获取图片

发布时间 2024-01-05 19:59:30作者: zhang0513

一、用一个实例来了解一下

 1、既然要用BeautifulSoup来解析,首先要把需要的模块导入;

import os            
import requests
from bs4 import BeautifulSoup

2、创建一个文件夹来存放要下载的数据:文件的名可以用户自定义

file_name = "imgs"
if not os.path.exists(file_name):
    os.makedirs(file_name) #创建

3、准备好URL链接并分析

url = 'https://www.nanrentu.cc/fjtp/42604.html'
#UA伪装
headers = {
    "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0"
}
req = requests.get(url = url,headers = headers)        #get请求
soup = BeautifulSoup(req.text,'lxml')

4、分析数据结构

打开网页链接用,按F12后去分析数据结构格式,发现要下载的图片在一个<div class = " info-pic-list">里面,而且这个标签是唯一的

直接用find().find(()方法来获取图片名称和图片链接

pic = soup.find('div',class_='info-pic-list').find_all('img')

 下面的就是通过循环来获取每一个图片的名称,用alt标签来获取值;图片链接用src标签来获取,如下

for i in pic:
    src_url = i['src']                   #获取每一个链接
    pic_name = i['alt']                  #获取图片的名
    img_resp = requests.get(src_url)     #对每一个链接再请求
    content = img_resp.content           #调用.content方法来获取内容
    #下载本地
    with open(file_name + "/" + pic_name + ".png" ,mode= 'wb')as f:
        f.write(content)
        print(pic_name + "完成下载")
        f.close()
    req.close()

运行后:

二、改进

1、按照以上的方式只能获取到一个页面中的图片,多页面怎么获取;

2、分析后发现如下:具体有多少也,当点下末页的时候就可以看到数据一共八页

"""
https://www.nanrentu.cc/fjtp/42604.html
https://www.nanrentu.cc/fjtp/42604_2.html 
https://www.nanrentu.cc/fjtp/42604_3.html
https://www.nanrentu.cc/fjtp/42604_4.html
...

3、只需要在前面循环数组即可;当然sum= 8的这个值也可以在网页中获取到