Advertisement
Guest User

Untitled

a guest
Jan 31st, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.85 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import re
  4. import urllib.request
  5. import argparse
  6. from urllib.parse import urlparse, urljoin
  7. import os
  8. from os import path
  9. import shutil
  10. import sys
  11. import platform
  12. import subprocess
  13.  
  14. parser = argparse.ArgumentParser()
  15. parser.add_argument("-p", "--path", required=False,
  16.                     help="Путь для сохранения, если не указан, то выбирается тот путь, где лежит скрипт", type=str)
  17. parser.add_argument("-u", "--url", required=True,
  18.                     help="Тред для сохранения картинок", type=str)
  19. args = parser.parse_args()
  20.  
  21.  
  22. def die(msg):
  23.     sys.stderr.write(msg + '\n')
  24.     sys.exit(1)
  25.  
  26.  
  27. def path():  # функция для указания пути
  28.     if args.path:  # если аргумент есть
  29.         if platform.system().lower() != 'windows':
  30.             if args.path[-1] != '/':  # если последним символом не является /
  31.                 args.path += '/'  # добавить к строке символ /
  32.                 return(args.path)
  33.             else:
  34.                 return(args.path)
  35.         elif platform.system().lower() == 'windows':
  36.             if args.path[-1] != '\\':  # если последним символом не является \
  37.                 args.path += '\\'  # добавить к строке символ \
  38.                 return (args.path)  # возвратить аргумент
  39.             else:  # если все нормально, вернуть аргумент
  40.                 return (args.path)
  41.         # если путь не существует, сказать об этом
  42.         if os.path.exists(args.path) == False:
  43.             die('Путь должен существовать')
  44.     else:  # если аргумента нет, вернуть директорию, в которой находится скрипт
  45.         if platform.system().lower() == 'windows':
  46.             return (os.getcwd() + '\\')
  47.         else:
  48.             return(os.getcwd() + '/')
  49.  
  50.  
  51. def save_image(url, number):
  52.     filename = path() + names[number]
  53.     r = requests.get(url, allow_redirects=True)
  54.     open(filename, 'wb').write(r.content)
  55.     print(filename + ' was saved')
  56.  
  57.  
  58. def dwoch_scrape(url):
  59.     page = requests.get(url)
  60.     soup = BeautifulSoup(page.text, 'lxml')
  61.     return(soup)
  62.  
  63.  
  64. def pars_thread(url):
  65.     counter = 0
  66.     # цикл парсит названия файлов в классе post__image и добавляет их в список
  67.     for link in dwoch_scrape(url).select('.post__image'):
  68.         for i in link.find_all('a'):
  69.             if i.get('title') != None:
  70.                 names.append(i.get('title'))
  71.     for link in dwoch_scrape(url).select('.post__image'):
  72.         for i in link.find_all(class_="post__image-link"):
  73.             # в функцию для сохранения медиа передается ссылка и номер итерации
  74.             save_image((urljoin(url, i.get('href'))), counter)
  75.             counter += 1  # счетчик читает итерацию цикла
  76.  
  77.  
  78. def find_domain(url):
  79.     domain = ''
  80.     counter = 0
  81.     for i in url:
  82.         if i == '/':
  83.             counter += 1
  84.             if counter == 3:
  85.                 break
  86.         domain += i
  87.     return(domain.replace('https://', ''))
  88.  
  89.  
  90. def ping(host):
  91.     parameter = '-n' if platform.system().lower() == 'windows' else '-c'
  92.  
  93.     command = ['ping', parameter, '1', host]
  94.     response = subprocess.call(command)
  95.  
  96.     if response == 0:
  97.         return True
  98.     else:
  99.         return False
  100.  
  101.  
  102. if __name__ == '__main__':
  103.     names = []
  104.     link = args.url
  105.     if ping(find_domain(link)) == False:
  106.         die('Сайт не отвечает.')
  107.     else:
  108.         pars_thread(link)
  109.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement