В python, как мне заставить urllib распознавать несколько строк в строке как отдельные URL-адреса?

Я очень новичок в программировании, поэтому простите любые ошибки, которые я делаю в объяснении! Я пытаюсь написать код на python, который использует Praw для доступа к субреддиту / r / pics, очищает исходные URL-адреса и отображает их с помощью urllib, cv2 и numpy.

В настоящее время мой код выглядит так:

import praw
import numpy as np
import urllib
import cv2

# urllib set-up
def reddit_scrape(url):
    resp = urllib.request.urlopen(url)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return image

# reddit set-up
reddit = praw.Reddit(client_id = 'id',
                     client_secret = 'secret',
                     user_agent = 'agent')

subreddit = reddit.subreddit('pics')
hot_pics = subreddit.hot(limit=10)

for submission in hot_pics:
    if not submission.stickied:
        print(submission.url)

# print images  
urls = [submission.url]
for url in urls:
    image = reddit_scrape(url)
    cv2.imshow('image', image)
    cv2.waitKey(0)

Моя проблема, когда я запускаю это, заключается в том, что, хотя строка print(submission.url) печатает полный список 10 лучших сообщений, фактически открывается и отображается только последний URL-адрес в списке.

Я предполагаю, что ошибка кроется где-то в моем определении

urls = [submission.url]

Но я не могу определить «urls» как статический список URL-адресов, потому что горячий список со временем меняется.

Что я делаю не так? есть ли даже правильный способ сделать это? Любая помощь будет принята с благодарностью.


person Christian Jackson    schedule 13.12.2018    source источник


Ответы (1)


submission — это последняя отправка в конце цикла for. Вместо построения urls вне цикла, поэтому, когда вы говорите urls = [submission.url], вы получаете только последний URL-адрес. Вместо этого вы должны создать список и добавить их:

urls = []
for submission in hot_pics:
    if not submission.stickied:
        urls.append(submission.url)

Или даже более Pythonic:

urls = [submission.url for submission in hot_pics if not submission.stickied]

Затем for url in urls будет перебирать все добавленные URL-адреса.

person mVChr    schedule 13.12.2018
comment
Спасибо, это очень полезно! - person Christian Jackson; 13.12.2018