如何修复“禁止的”:在praw中收到403 HTTP响应?

时间:2019-06-20 20:07:05

标签: python reddit

我想在reddit上收集一些帖子标题以进行分析。通过不断调试我的代码,我可以获得一些职位的标题。突然我尝试使用PRAW收集帖子时收到禁止的403。在线解释是:“绝对禁止访问您尝试访问的页面或资源。换句话说,出现403错误意味着您无权访问要查看的内容”。 请告诉我该怎么办。谢谢

尝试添加一些标题并使用时间延迟

url="https://www.reddit.com"

my_headers=["Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html",
"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"
]

def get_content(url,headers):

    randdom_header=random.choice(headers)

    req=urllib.Request(url)
    req.add_header("User-Agent",randdom_header)           
    req.add_header("Host","www.reddit.com")
    req.add_header("Referer","https://www.reddit.com")
    req.add_header("GET",url)

    content=urllib.urlopen(req).read()
    return content

print (get_content(url,my_headers))

2 个答案:

答案 0 :(得分:1)

我只是遇到了一些麻烦,因为我尝试连接的subreddit变得不公开了。

所以我的建议是先检查您要连接的subreddit是否将允许设置机器人的帐户访问该subreddit。

我认为第一个答案对如何以编程方式处理它产生了很大的反响。

答案 1 :(得分:0)

因此,我以前经常遇到这个问题,无论我在哪里搜索,都没有发现“修复”的本质。解决问题的最简单方法是仅捕获错误,然后对其进行处理。见下文。

首先,我想您需要导入正确的“错误”。 (我不确定该怎么写)

from prawcore.exceptions import Forbidden

然后,您可以尝试执行一些返回我们的Forbidden错误的操作。使用try:执行此操作。我们的代码应如下所示:

from prawcore.exceptions import Forbidden

try:
    comment.reply("I can comment here!")

在这里,我们尝试对某些(在我们的情况下)虚构的评论对象发表评论,如果允许我们发表评论,即不被禁止进行reddit或该评论,则回复将成功“发送”。如果不是这种情况,我们将收到可怕的prawcore.exceptions.Forbidden: received 403 HTTP response

要解决此问题,我们只需except xxx:个错误即可。看起来像except Forbidden:。如果我们被禁止采取某种行动,那么我们可以采取一些行动。我们的最终代码如下:

#importing our error
from prawcore.exceptions import Forbidden

#trying to comment (we may be banned)
try:
    comment.reply("I can comment here!")

#doing something if we can't comment
except Forbidden:
   print(f"We\'ve been banned on r/{comment.subreddit}!"

希望这对您有所帮助,我希望进一步阐述!