当前位置: 首页 > news >正文

批量爬取网站图片脚本

不分文件夹

import requests
from bs4 import BeautifulSoup
import os
from concurrent.futures import ThreadPoolExecutordef download_image(img_url):# 检查图片后缀是否为.jpg或.jpegif img_url.lower().endswith(('.jpg', '.jpeg')):try:img_response = requests.get(img_url, stream=True)img_size = int(img_response.headers.get('content-length', 0))if img_size > 50 * 1024:  # 大于50KBfilename = os.path.join(images_dir, img_url.split('/')[-1])with open(filename, 'wb') as f:for chunk in img_response.iter_content(1024):f.write(chunk)print(f"Downloaded {img_url}")except Exception as e:print(f"Error downloading {img_url}: {e}")else:print(f"Skipped {img_url} due to file extension")def download_images_from_page(url):page_response = requests.get(url)page_soup = BeautifulSoup(page_response.content, 'html.parser')images = page_soup.find_all('img')with ThreadPoolExecutor(max_workers=5) as executor:  # 可以调整max_workers来改变线程数for img in images:img_url = img['src']executor.submit(download_image, img_url)def main(base_url, start_path):global images_dirimages_dir = 'images'if not os.path.exists(images_dir):os.makedirs(images_dir)start_url = f"{base_url}/{start_path}"response = requests.get(start_url)soup = BeautifulSoup(response.content, 'html.parser')links = soup.find_all('h3')for link in links:a_tag = link.find('a', href=True)if a_tag:full_url = f"{base_url}/{a_tag['href']}"download_images_from_page(full_url)# 示例中使用的基本URL和开始路径
base_url = 'http://xxxxxxx'
start_path = 'thread6.php?fid=15'if __name__ == "__main__":main(base_url, start_path)

按文件夹分类

import requests
from bs4 import BeautifulSoup
import os
from concurrent.futures import ProcessPoolExecutor
import redef sanitize_folder_name(name):"""清理文件夹名称,移除或替换不合法的文件系统字符。"""return re.sub(r'[\\/*?:"<>|]', '_', name)def download_image(data):img_url, filename_prefix = dataif img_url.lower().endswith(('.jpg', '.jpeg')):try:img_response = requests.get(img_url, stream=True)img_size = int(img_response.headers.get('content-length', 0))if img_size > 20 * 1024:  # 大于20KBfilename = f"{filename_prefix}.jpg"with open(filename, 'wb') as f:for chunk in img_response.iter_content(1024):f.write(chunk)print(f"Downloaded {filename}")except Exception as e:print(f"Error downloading {img_url}: {e}")else:print(f"Skipped {img_url} due to file extension")def download_images_from_page(url, base_dir):page_response = requests.get(url)page_soup = BeautifulSoup(page_response.content, 'html.parser')images = page_soup.find_all('img')img_data = []for i, img in enumerate(images):img_url = img['src']filename_prefix = os.path.join(base_dir, f"{i:04d}")img_data.append((img_url, filename_prefix))with ProcessPoolExecutor(max_workers=4) as executor:  # 调整max_workers来改变进程数executor.map(download_image, img_data)def main(base_url, start_path):global images_dirimages_dir = 'images'if not os.path.exists(images_dir):os.makedirs(images_dir)start_url = f"{base_url}/{start_path}"response = requests.get(start_url)soup = BeautifulSoup(response.content, 'html.parser')links = soup.find_all('h3')for link_index, link in enumerate(links):a_tag = link.find('a', href=True)if a_tag:folder_name = sanitize_folder_name(a_tag.text.strip())full_url = f"{base_url}/{a_tag['href']}"page_dir = os.path.join(images_dir, folder_name)if not os.path.exists(page_dir):os.makedirs(page_dir)download_images_from_page(full_url, page_dir)# 示例中使用的基本URL和开始路径
base_url = 'http://xxx/pw'
start_path = 'thread1022.php?fid=15&page=3'if __name__ == "__main__":main(base_url, start_path)
http://www.lryc.cn/news/312835.html

相关文章:

  • scrapy 爬虫:多线程爬取去微博热搜排行榜数据信息,进入详情页面拿取第一条微博信息,保存到本地text文件、保存到excel
  • 网络、UDP编程
  • VSCode安装与使用
  • 进程和线程的区别与联系
  • 6、Redis-KV设计、全局命令和安全性
  • python之海龟绘图
  • Java实战:Spring Boot 实现异步记录复杂日志
  • “色狼”用英语怎么说?柯桥日常英语,成人英语口语学习
  • Docker前后端项目部署
  • 如何快速的搭建一个小程序
  • STM32自学☞AD多通道
  • 微服务之商城系统
  • 安卓玩机工具推荐----高通芯片9008端口读写分区 备份分区 恢复分区 制作线刷包 工具操作解析
  • 全量知识系统问题及SmartChat给出的答复 之16 币圈生态链和行为模式
  • 【MOMO_Tips】批量将word转换为PDF格式
  • 【JSON2WEB】08 Amis的事件和校验
  • 抖店类目报白什么意思?什么类目需要报白?这次给你讲明白!
  • <C++>【继承篇】
  • size_t 和double相乘怎么转换size_t
  • C# 的一些好用的语法糖介绍
  • 驱动开发面试复习
  • 监测数据计算与换算:确保工程安全的关键步骤
  • Vue项目实战--空间论坛(1)
  • linux内核驱动——字符设备实现两个终端单向收发
  • 读取CSV数据并写入MySQL
  • centos7.4下升级最新的ssh
  • Java实现的双向链表示例
  • 生物电信号测量技术
  • 【开源】JAVA+Vue.js实现创意工坊双创管理系统
  • Python基于opencv的人脸识别上课签到考勤系统,附源码