如何检查Reddit帖子中是否仅包含图片而没有其他内容?

时间:2019-02-04 16:50:51

标签: python regex reddit praw

背景:我目前正在使用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。但是,如何确定帖子中绝对没有 文本(空格和奇怪的转义序列&#x200B;除外,我不明白其用途)?< / p>

1 个答案:

答案 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

  

如何确定图片中绝对没有文本

“图片中没有文字”是什么意思?图片包含文字对您意味着什么?