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 连接)。这到底是怎么回事,有人有什么想法吗?

谢谢!

编辑:添加更多信息。

我得到的错误是这个

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()

对于初学者来说,有两件重要的事情:

  • 确保您站在法律方面。根据Instagram的使用条款:

我们禁止通过自动方式抓取、抓取、缓存或以其他方式访问服务上的任何内容,包括但不限于用户个人资料和照片(除非搜索引擎在 Instagram 明确同意的情况下使用的标准搜索引擎协议或技术的结果)。

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

  • 有一个Instagram API可以帮助保持法律方面并使生活更轻松。有一个Python客户端:python-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()

最新更新