一、用一个实例来了解一下
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的这个值也可以在网页中获取到
sum = 8; for page in range(1,sum): url = f'https://www.nanrentu.cc/fjtp/42604_{page}.html'标签:fjtp,www,name,获取,python,nanrentu,bs4,42604 From: https://www.cnblogs.com/zp513/p/17892642.html