stanis-tits-scrap/stanis-tits.py

100 lines
3.2 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""Скрипт для скачивания голых и не только девушек с блога blog.stanis.ru"""
import re
import shutil
import os.path
import requests
from bs4 import BeautifulSoup
__author__ = "Alexander Popov"
__version__ = "1.0.2"
__license__ = "Unlicense"
# Путь к директории для загрузки изображений
DOWNLOAD_DIRECTORY = "./images"
def get_images_links(page):
"""В качестве аргумента получает номер страницы
и возвращает списком адреса всех изображений"""
# На сайте фильтр изображений настроен через cookies
# Так что устанавливаем их в нужное положение
cookies = dict(block="951")
# Загружаем страницу и подсовываем её парсеру с необходимыми параметрами
r = requests.get(
"http://blog.stanis.ru/?back={0}".format(
page,
),
cookies=cookies,
)
soup = BeautifulSoup(
r.text.encode("cp1251"), "html.parser", from_encoding="windows-1251"
)
# Получаем все теги <img> на странице
img_tags = soup.findAll("img", src=re.compile("img/*"))
# Получаем все адреса изображений и сохраняем их в список img_links
img_links = list()
for image in img_tags:
img_links.append(image["src"].split("/")[1])
return img_links
def image_download(image):
"""В качестве аргумента получает уникальное имя изображения,
скачивает и сохраняет его на диск"""
response = requests.get(
"https://blog.stanis.ru/imgs/{0}".format(
image,
),
stream=True,
)
image_size = int(response.headers.get("Content-Length", 0))
if (
not os.path.exists("{0}/{1}".format(DOWNLOAD_DIRECTORY, image))
or int(os.path.getsize("{0}/{1}".format(DOWNLOAD_DIRECTORY, image)))
!= image_size
):
with open("{0}/{1}".format(DOWNLOAD_DIRECTORY, image), "wb") as out_image:
shutil.copyfileobj(
response.raw,
out_image,
)
if __name__ == "__main__":
"""Главный цикл программы"""
if not os.path.exists(DOWNLOAD_DIRECTORY):
os.mkdir(DOWNLOAD_DIRECTORY)
current_page = 0
downloaded_counter = 0
while True:
try:
# Получаем адреса изображений и сортируем их в порядке возрастания
images = get_images_links(current_page)
images.sort()
# По очереди скачиваем изображения
for image in images:
image_download(image)
downloaded_counter += 1
print("\rЗагружено {0} файлов.".format(downloaded_counter), end="")
current_page += 1
except KeyboardInterrupt:
print("Всего загружено {0} файлов.".format(downloaded_counter))
quit()