在 python 中,如何让 urllib 将字符串中的多行识别为单独的 URL?

In python, how do I get urllib to recognize multiple lines in a string as separate URLs?

我对代码还很陌生,所以请原谅我在解释中犯的任何错误!我正在尝试在 python 上编写代码,使用 Praw 访问 /r/pics subreddit,抓取源 urls 并使用 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的静态列表,因为热门列表会随着时间而变化。

我做错了什么?有没有正确的方法来做到这一点?任何帮助将不胜感激。

submissionfor 循环结束时最后一次提交的内容。而不是在循环外构造 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。