Python 多线程抓取彼岸图库高清图片到本地:代码示例与防坑指南
以下是一个使用 Python 多线程从彼岸图库抓取高清图片到本地的示例代码: ```python import requests import os from bs4 import BeautifulSoup import threading # 定义图片保存路径 save_dir = 'bijiaotu' if not os.path.exists(save_dir): os.makedirs(save_dir) # 定义获取图片链接的函数 def get_image_urls(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} try: response = requests.get(url, headers=headers) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') # 查找所有图片标签 img_tags = soup.find_all('img') image_urls = [] for img in img_tags: if 'src' in img.attrs: img_url = img['src'] # 处理相对链接 if not img_url.startswith('http'): base_url = '/'.join(url.split('/')[:3]) img_url = base_url + img_url image_urls.append(img_url) return image_urls except requests.RequestException as e: print(f"请求出错: {e}") return [] # 定义下载图片的函数 def download_image(url): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) response.raise_for_status() # 获取图片文件名 filename = os.path.join(save_dir, url.split('/')[-1]) with open(filename, 'wb') as f: f.write(response.content) print(f"下载成功: {filename}") except requests.RequestException as e: print(f"下载出错: {e}") # 定义主函数 def main(): # 彼岸图库的具体页面 URL,这里需要替换为实际要抓取的页面 target_url = 'https://pic.netbian.com/' image_urls = get_image_urls(target_url) # 创建线程列表 threads = [] for url in image_urls: thread = threading.Thread(target=download_image, args=(url,)) threads.append(thread) thread.start() # 等待所有线程完成 for thread in threads: thread.join() if __name__ == "__main__": main() ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 网站的反爬虫机制,可能会对频繁的请求进行限制,需要设置合理的请求头和请求间隔。 2. 图片链接可能是相对链接,需要正确处理以确保能正确下载图片。 3. 多线程下载时,要注意线程安全问题,避免多个线程同时操作同一个文件或资源。 ######[AI写代码神器 | 773点数解答 | 2025-08-11 22:52:20]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)478
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)44
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)432
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)426
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)271
- 易语言多线程启动:如何传递并处理文本数组及注意要点(字节豆包 | 610点数解答 | 2025-08-04 18:05:23)190
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)280
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)278
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)277
- 用Python轻松将PPT每页转为图片,附代码示例!(阿里通义 | 315点数解答 | 2024-04-23 10:01:04)1376
- Python 实现:在 Windows 系统将 PPT 每页轻松转为图片(百度文心 | 692点数解答 | 2024-10-30 18:08:44)383
- Python 实现:轻松将 PPT 每页转换为图片(DeepSeek | 462点数解答 | 2025-02-17 17:26:45)277