Рубрики
Без рубрики

Скаивание изображений из резьбы Reddit в Python

Введение Это небольшой бокомый проект, который я сделал, чтобы попытаться скрепить изображения из Reddit Th … Теги с Python, Azure, WebDev, Serverless.

Это небольшой бокомый проект, который я сделал, чтобы попробовать искажать изображения из нитей Reddit. Есть несколько разных подпудритших, обсуждающих шоу, специально /r/anime Где пользователи добавляют скриншоты много эпизодов. И я подумал, что будет круто, чтобы увидеть, сколько усилий было бы автоматически сопоставлять список этих скриншотов из нити и отображать их в простой галерее. Результат выглядел так

Осторожность

PRAW Это обертка Python Reddit API, что обеспечивает хороший набор привязки, чтобы поговорить с Reddit.

Чтобы соскрести Reddit, вам нужны учетные данные. Способ выработки учетных данных спрятаны на https://www.reddit.com/prefs/apps Где вы должны зарегистрировать новое «приложение» с Reddit. Подключение так же просто, как

import praw

reddit = praw.Reddit(client_id='id', \
                     client_secret='secret', \
                     user_agent='useragent', \
                     username='username', \
                     password='DevToIsCool')

Пересечение Reddit производится простым на API, например, печатая все комментарии в потоке.

submission = reddit.submission(url="https://reddit.com/r/abcde")
for comment in submission.comments.list():
    print(comment)

Найти ссылки

99% изображений, которые я искал, отправлены в Imgur, поэтому я просто подобрал на тех. Я использовал регулярное выражение для извлечения ссылок. Я всегда рекомендую использовать инструмент, как Regex101 Это позволяет очень легко отлаживать ваши регулярные выражения, поскольку они могут быть красивыми изгибающими мозгами.

    REGEX_TEST = r"((http|https)://i.imgur.com/.+?(jpg|png))"
    p = re.compile(REGEX_TEST, re.IGNORECASE)

Проверьте, существует ли изображение

Одной из проблем, которые я обнаружил, было мертвые ссылки на изображения, поэтому я создал простой помощник, который проверяет состояние_Code для этой ссылки.

# Check if a link still is exists
def checkLinkActive(url):
    request = requests.head(url)
    if request.status_code == 200:
        return True
    else:
        return False

Получение миниатюр

Чтобы сохранить пропускную способность и ваши мобильные данные, которые я хотел вернуть меньшую версию изображения. В Imgur Вы можете добавить размер персонажа на URL, чтобы получить его по другому размеру , например, « л «Большой и» S ‘ маленький.

# Add a letter to an imgur url to make a small thumbnail
def getImgurThumbnail(url, size):
    startStr = url[:(len(url)-4)]
    endStr = url[len(url)-4:]
    return startStr + size + endStr

Положить все вместе

Положить все эти биты вместе ты получаешь

def getImages(url):
    submission = reddit.submission(url=url)
    # Tell API to return all comment in thread, results are
    # paginated by default
    submission.comments.replace_more(limit=None)

    # Create RegEx object for matching images
    REGEX_TEST = r"((http|https)://i.imgur.com/.+?(jpg|png))"
    p = re.compile(REGEX_TEST, re.IGNORECASE)

    imageMatches = []
    for comment in submission.comments.list():
        matches = p.findall(comment.body)
        for match in matches:
            if checkLinkActive(match[0]):
                imageMatches.append(
                    {"image": match[0], "thumbnail": getImgurThumbnail(match[0], "m")}
                )

    return imageMatches

Пробуя это

Я решил устроить быструю демонстрацию этого, используя функцию Azure для размещения моей новой функции и простой веб-формы, чтобы люди попробовали ее. Просто скопируйте и вставьте URL Reddit и функция вернет любые изображения.

Демо-приложение использует Bulma для взгляда и чувствовать, а немного Jquery для загрузки страницы.

Если вы хотите пойти, Вы можете играть на моем сайте здесь Отказ

Я буду искать в будущей статье при предоставлении поиска шоу имени вместо того, чтобы вставить индивидуальные URL-адреса эпизода. Счастливый reddit scraping!

Оригинал: “https://dev.to/sg3141592/scraping-images-from-reddit-threads-in-python-3pke”