403禁止使用Urllib2 [Python]

问题描述:

url = 'https://www.instagram.com/accounts/login/ajax/' 
values = {'username' : 'User', 
      'password' : 'Pass'} 

#'User-agent', '' 
data = urllib.urlencode(values) 
req = urllib2.Request(url, data,headers={'User-Agent' : "Mozilla/5.0"}) 
con = urllib2.urlopen(req) 
the_page = response.read() 

有没有人有任何想法呢?我不断收到错误“403禁止”。 它的可能Instagram有一些不会让我通过python连接(我不想通过他们的API连接)。这里究竟发生了什么,有没有人有任何想法?403禁止使用Urllib2 [Python]

谢谢!

编辑:添加更多信息。

我得到的错误是这样的

This page could not be loaded. If you have cookies disabled in your browser, or you are browsing in Private Mode, please try enabling cookies or turning off Private Mode, and then retrying your action. 

我修改了代码,但我仍然收到这个错误。

jar = cookielib.FileCookieJar("cookies") 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 
print len(jar) #prints 0 
opener.addheaders = [('User-agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36')] 
result = opener.open('https://www.instagram.com') 
print result.getcode(), len(jar) #prints 200 and 2 

url = 'https://www.instagram.com/accounts/login/ajax/' 
values = {'username' : 'username', 
      'password' : 'password'} 

data = urllib.urlencode(values) 

response = opener.open(url, data) 
print response.getcode() 
+1

用户代理不会削减它我猜。你需要其余的cookies,也许还需要一些标题。在instagram上启动控制台并键入'document.cookie'并将它们复制到此处。另外,它与Python无关,它不会让你用CURL来做到这一点。 – ishaan

+0

我的精神力量表明,需要使用他们的OAuth API登录。这就是说,这意味着你的应用程序的用户需要定向到一个网页,以获得需要交给你的应用程序的访问令牌(和/或刷新令牌)。快速搜索“Instagram OAuth”会导致[本页](https://www.instagram.com/developer/authentication/)。 – selbie

两个重要的事情,对于初学者:

  • 确保你留在法律方面。根据的Instagram的Terms of Use

我们禁止爬行,刮,缓存或通过自动化方法以其他方式访问的服务的任何内容,包括但不限于,用户配置文件和照片(除非可结果在Instagram的明确同意下,由搜索引擎使用的标准搜索引擎协议或技术)。

您不得通过未经授权的方式(包括但不限于通过使用自动化设备,脚本,机器人,蜘蛛,爬虫或刮板)为服务创建帐户。

除此之外,该Instagram的本身是JavaScript的沉重,你可能会发现很难,只要使用urllib2requests工作。如果出于某种原因,您无法使用该API,则可以通过selenium查看浏览器自动化。请注意,您也可以自动执行像PhantomJS这样的无头浏览器。这里是一个示例代码登录:

from selenium import webdriver 

USERNAME = "username" 
PASSWORD = "password" 

driver = webdriver.PhantomJS() 
driver.get("https://www.instagram.com") 

driver.find_element_by_name("username").send_keys(USERNAME) 
driver.find_element_by_name("password").send_keys(PASSWORD) 

driver.find_element_by_xpath("//button[. = 'Log in']").click()