我想在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))
答案 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}!"
希望这对您有所帮助,我希望进一步阐述!