Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- from bs4 import BeautifulSoup
- import re
- import urllib.request
- import argparse
- from urllib.parse import urlparse, urljoin
- import os
- from os import path
- import shutil
- import sys
- import platform
- import subprocess
- parser = argparse.ArgumentParser()
- parser.add_argument("-p", "--path", required=False,
- help="Путь для сохранения, если не указан, то выбирается тот путь, где лежит скрипт", type=str)
- parser.add_argument("-u", "--url", required=True,
- help="Тред для сохранения картинок", type=str)
- args = parser.parse_args()
- def die(msg):
- sys.stderr.write(msg + '\n')
- sys.exit(1)
- def path(): # функция для указания пути
- if args.path: # если аргумент есть
- if platform.system().lower() != 'windows':
- if args.path[-1] != '/': # если последним символом не является /
- args.path += '/' # добавить к строке символ /
- return(args.path)
- else:
- return(args.path)
- elif platform.system().lower() == 'windows':
- if args.path[-1] != '\\': # если последним символом не является \
- args.path += '\\' # добавить к строке символ \
- return (args.path) # возвратить аргумент
- else: # если все нормально, вернуть аргумент
- return (args.path)
- # если путь не существует, сказать об этом
- if os.path.exists(args.path) == False:
- die('Путь должен существовать')
- else: # если аргумента нет, вернуть директорию, в которой находится скрипт
- if platform.system().lower() == 'windows':
- return (os.getcwd() + '\\')
- else:
- return(os.getcwd() + '/')
- def save_image(url, number):
- filename = path() + names[number]
- r = requests.get(url, allow_redirects=True)
- open(filename, 'wb').write(r.content)
- print(filename + ' was saved')
- def dwoch_scrape(url):
- page = requests.get(url)
- soup = BeautifulSoup(page.text, 'lxml')
- return(soup)
- def pars_thread(url):
- counter = 0
- # цикл парсит названия файлов в классе post__image и добавляет их в список
- for link in dwoch_scrape(url).select('.post__image'):
- for i in link.find_all('a'):
- if i.get('title') != None:
- names.append(i.get('title'))
- for link in dwoch_scrape(url).select('.post__image'):
- for i in link.find_all(class_="post__image-link"):
- # в функцию для сохранения медиа передается ссылка и номер итерации
- save_image((urljoin(url, i.get('href'))), counter)
- counter += 1 # счетчик читает итерацию цикла
- def find_domain(url):
- domain = ''
- counter = 0
- for i in url:
- if i == '/':
- counter += 1
- if counter == 3:
- break
- domain += i
- return(domain.replace('https://', ''))
- def ping(host):
- parameter = '-n' if platform.system().lower() == 'windows' else '-c'
- command = ['ping', parameter, '1', host]
- response = subprocess.call(command)
- if response == 0:
- return True
- else:
- return False
- if __name__ == '__main__':
- names = []
- link = args.url
- if ping(find_domain(link)) == False:
- die('Сайт не отвечает.')
- else:
- pars_thread(link)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement