403禁止使用Urllib2 [Python]

k9b*_*k9b 3 python instagram-api

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()
Run Code Online (Sandbox Code Playgroud)

有没有人对此有任何想法?我一直收到错误"403禁止".它可能的instagram有一些东西不允许我通过python连接(我不想通过他们的API连接).到底发生了什么,有没有人有任何想法?

谢谢!

编辑:添加更多信息.

我得到的错误就是这个

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.
Run Code Online (Sandbox Code Playgroud)

我编辑了我的代码,但仍然遇到了这个错误.

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()
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 7

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

  • 确保你保持合法的一面.根据Instagram的使用条款:

我们禁止通过自动方式抓取,抓取,缓存或以其他方式访问服务上的任何内容,包括但不限于用户个人资料和照片(可能是标准搜索引擎协议或搜索引擎使用Instagram技术的结果)表示同意).

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

除此之外,Instagram本身是javascript很重,你可能会发现很难使用just urllib2或者requests.如果出于某种原因,您无法使用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()
Run Code Online (Sandbox Code Playgroud)