Guest User

Untitled

a guest
Oct 13th, 2013
74
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python3
  2. # coding: utf-8
  3.  
  4. import argparse #модуль для аргументов командной строки
  5. import sys # будем юзать пару функций
  6. import re # модуль для работы с регулярными выражениями
  7. import os # в модуле есть функции для создание папок
  8. from urllib.request import urlopen, urlretrieve # для загрузки файлов
  9.  
  10. #фунция которая грузит тред и парсит ссылки на пикчи
  11. def parse_thread(board, thread):
  12.     #формируем полный адрес к нужному треду
  13.     url = ('http://2ch.hk/%s/res/%s.html' % (board, thread))
  14.     #загружаем html код страницы
  15.     data = urlopen(url).read()
  16.     #получаем список ссылок на пикчи при помощи регулярного выражения, гули python re
  17.     links = re.findall('<a target="_blank" href="(.*?)">', str(data))
  18.     #выводим количество найденных пикч
  19.     print('found %s images' % len(links))
  20.     #формируем список с полным адресом для скачивания пикч
  21.     for i, src in enumerate(links):
  22.         links[i] = ('http://2ch.hk' + src)
  23.     return links
  24.  
  25. #функция скачивает пикчу и сохраняет
  26. def download(url, path):
  27.     #выдираем название файла с полного пути для загрузки
  28.     fileName = url.split('/')[-1]
  29.     print(fileName)
  30.     #формируем путь для сохранения с названия папки и файла
  31.     file_path = path + fileName
  32.     #скачиваем пикчу и сохраняем
  33.     urlretrieve(url, file_path)
  34.  
  35. #Код начинает работать отсюда!
  36. if __name__ == "__main__":
  37.     #парсим аргументы командной строки, гугли argparse
  38.     parser = argparse.ArgumentParser(description='Download picture from 2ch')
  39.     parser.add_argument('-b', '--board', type=str, help='board name')
  40.     parser.add_argument('-t', '--thread', type=int, help='thread number')
  41.     options = parser.parse_args()
  42.  
  43.     #если скрипт запущен без параметров - показываем справку и завершаем работу скрипта
  44.     if len(sys.argv) == 1:
  45.         parser.print_help()
  46.         sys.exit(1)
  47.     #запускаем фунцию parse_thread с параметрами - название доски и номер треда, результат роботы функции будет сохранен в список img_list
  48.     img_list = parse_thread(options.board, options.thread)
  49.     #формируем название папки в которую будем сохранять пикчи
  50.     path = ('/[%s]%s/' % (options.board, options.thread))
  51.     path = os.getcwd() + path
  52.     #проверяем наличие папки с таким названием, если ее нет то создаем
  53.     if not os.path.exists(path):
  54.         os.makedirs(path)
  55.  
  56.     print('download...')
  57.     #в цикле вызываем функцию download с адресом для загрузки и папкой куда сохранять
  58.     for url in img_list:
  59.         download(url, path)
RAW Paste Data