В Python, как мне заставить urllib распознавать несколько строк в строке как отдельные URL? - PullRequest
0 голосов
/ 13 декабря 2018

Я очень новичок в коде, так что простите любые ошибки, которые я делаю в объяснении!Я пытаюсь написать код на python, который использует Praw для доступа к / r / pics subreddit, очищает исходные 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, потому что горячий список меняетсявремя.

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

1 Ответ

0 голосов
/ 13 декабря 2018

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.

...