查看: 818|回复: 0

[其他发布] 爬取图虫网的美女图片脚本

[复制链接]
发表于 2023-7-24 20:49 | 显示全部楼层 |阅读模式
非法程序、 2023-7-24 20:49 818 0 显示全部楼层
美女图片比较正经,脚本自动跳过只有一张图片的专题。爬下来的图片是.webp格式的,容量小。我看了一下,大概100页左右,爬完一共600多M
感觉质量不行。权当练手吧。
  1. import os
  2. import time
  3. import requests
  4. import re
  5. from concurrent.futures import ThreadPoolExecutor

  6. # 处理目录非法字符
  7. def normalize_directory_name(name):
  8.     # 使用正则表达式替换非法字符为空格
  9.     cleaned_name = re.sub(r'[\\/:*?"<>|]', ' ', name)
  10.     # 去除多余的空格,并限制长度为100个字符
  11.     normalized_name = re.sub(r'\s+', ' ', cleaned_name).strip()[:100]
  12.     return normalized_name

  13. def download_image(image_info):
  14.     user_id = image_info['user_id']
  15.     img_id_str = image_info['img_id_str']
  16.     img_url = f'https://photo.tuchong.com/{user_id}/f/{img_id_str}.webp'
  17.     image_data = requests.get(url=img_url, proxies=None).content
  18.     return img_id_str, image_data

  19. for k in range(1, 99):
  20.     url = f'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts?page={k}&count=20&order=weekly&before_timestamp='

  21.     response = requests.get(url=url)
  22.     json_data = response.json()

  23.     post_list = json_data['postList']

  24.     with ThreadPoolExecutor() as executor:
  25.         futures = [executor.submit(download_image, image_info) for post in post_list for image_info in post.get('images', [])]

  26.         for future in futures:
  27.             img_id_str, image_data = future.result()

  28.             # 获取帖子标题
  29.             for post in post_list:
  30.                 images = post.get('images', [])
  31.                 if len(images) <= 1:
  32.                     continue
  33.                 if any(image_info['img_id_str'] == img_id_str for image_info in images):
  34.                     title = post['title']
  35.                     if not title:  # 如果标题为空,则用用户ID替代
  36.                         title = post['author_id']
  37.                     title = normalize_directory_name(title)
  38.                     image_dir = f'G:/tuchongspider/{title}'
  39.                     if not os.path.exists(image_dir):
  40.                         os.makedirs(image_dir)

  41.                     image_path = f'{image_dir}/{title}-{img_id_str}.webp'
  42.                     with open(image_path, 'wb') as f:
  43.                         f.write(image_data)

  44.                     print(f'Downloaded {img_id_str}.webp')
  45.                     break
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表