如何从指定网站爬取指定数量(如15张)的图片
修改代码以限制爬取图片数量
可以通过两种简单方式实现只爬取指定数量的图片(比如15张),以下是具体修改方案:
方案一:对图片列表进行切片截取
直接在收集完图片链接后,截取列表的前N项:
from bs4 import BeautifulSoup # 修正原导入方式,更规范 import requests as rq import sys page_url = sys.argv[1] # 修正URL拼接逻辑,避免重复添加www和斜杠 if not page_url.startswith(('http://', 'https://')): page_url = f'https://www.{page_url}' if not page_url.endswith('/'): page_url += '/' r2 = rq.get(page_url) soup2 = BeautifulSoup(r2.text, "html.parser") images = [] image_sources = soup2.select('img') for img in image_sources: # 避免没有src属性的图片报错 if 'src' in img.attrs: images.append(img['src']) # 指定要爬取的图片数量 target_count = 15 # 截取前target_count个链接,避免列表长度不足时出错 selected_images = images[:target_count] for l in selected_images: print(l)
方案二:遍历过程中计数并终止
在遍历图片元素时,计数达到指定数量就停止,减少不必要的遍历:
from bs4 import BeautifulSoup import requests as rq import sys page_url = sys.argv[1] if not page_url.startswith(('http://', 'https://')): page_url = f'https://www.{page_url}' if not page_url.endswith('/'): page_url += '/' r2 = rq.get(page_url) soup2 = BeautifulSoup(r2.text, "html.parser") images = [] target_count = 15 count = 0 image_sources = soup2.select('img') for img in image_sources: if count >= target_count: break if 'src' in img.attrs: images.append(img['src']) count += 1 for l in images: print(l)
关键修改点说明
- 添加了URL格式校验:避免用户输入的URL重复出现
www或斜杠,提升代码鲁棒性 - 增加了src属性判断:防止部分图片标签没有src属性导致程序报错
- 通过列表切片或计数终止的方式,严格控制爬取的图片数量
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan
相关产品推荐
相关产品推荐

