背景:我目前正在使用praw库和Python 3.7来制作Reddit机器人。我的机器人需要做的一件事是检查某个subreddit上的最新帖子,以查看它们是否仅包含图片而不包含其他内容。
鉴于Reddit上的帖子类型不同(帖子只是上载的图像,而普通文本帖子中包含图像),我首先决定区分这两种可能性。据我所知,praw没有提供任何功能来获取Reddit帖子的类型。
要处理仅是图像而不是其他内容的帖子,我只需使用submission检查返回的Praw specific regex的URL:
^http(s)?://i\.redd\.it/\w+\.(png|gif|jpg|jpeg)$
如果URL匹配,我将下载图像。这可行。另一方面,对于恰好只包含图像的文本帖子,我检查了selftext
属性,对于仅包含图像而没有其他内容的帖子,这是类似的事情:
​\n\nhttps://i.redd.it/xxxxxxxxxx.png
使用上面的正则表达式(除去开始和结束标记),我可以提取URL并确保通过re.findall
仅存在一个URL。但是,如何确定帖子中绝对没有 文本(空格和奇怪的转义序列​
除外,我不明白其用途)?< / p>
答案 0 :(得分:1)
据我所知,praw没有提供任何功能来获取Reddit帖子的类型。
PRAW从Reddit的响应中动态加载属性。有关任何给定对象可用的内容,请参见PRAW文档部分Determine Available Attributes of an Object。对于Submission
,建议使用以下代码段:
import pprint # assume you have a Reddit instance bound to variable `reddit` submission = reddit.submission(id='39zje0') print(submission.title) # to make it non-lazy pprint.pprint(vars(submission))
这将打印出dict
的可用属性。使用此工具,您将发现属性.is_self
和.is_reddit_media_domain
。第一个告诉您(以布尔值形式)帖子是否为自发帖子,第二个告诉您(以布尔值形式)帖子是否为“ reddit media”,其中还包括视频。无需将URL与正则表达式匹配,只需检查.is_reddit_media_domain
是否正确和.domain == 'i.redd.it
。
例如:
In [5]: reddit.submission('anr0l2').is_self
Out[5]: True
In [6]: reddit.submission('anspgf').domain == 'i.redd.it'
Out[6]: True
In [7]: reddit.submission('antg2x').domain == 'i.reddi.it'
Out[7]: False
如何确定图片中绝对没有文本
“图片中没有文字”是什么意思?图片包含文字对您意味着什么?