【问题标题】:403 Forbidden using Urllib2 [Python]403 禁止使用 Urllib2 [Python]
【发布时间】:2016-01-24 09:29:01
【问题描述】:
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()

【问题讨论】:

  • 我猜用户代理不会削减它。您需要其余的 cookie,也许还需要一些标头。在 instagram 上启动控制台并输入 document.cookie 并将它们复制到此处。此外,它与 Python 无关,它也不会让你用 CURL 来做这件事。
  • 我的超能力表明需要使用他们的 OAuth API 登录。也就是说,这意味着您的应用程序的用户将需要被定向到网页以获取需要交给您的应用程序的访问令牌(和/或刷新令牌)。快速搜索“Instagram OAuth”会找到this page

标签: python instagram-api


【解决方案1】:

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

  • 确保您站在法律方面。根据 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()

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 2016-06-20
    • 2012-10-29
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多