Instagram用户页面解析(带代理,不带API)

Instagram user page parsing (with proxy, without API)

我需要在没有 API 和代理的情况下解析 instagram 用户页面,我使用如下代码

def client(options = {})
  Faraday.new('https://www.instagram.com', ssl: { verify: false }, request: { timeout: 10 }) do |conn|
    conn.request :url_encoded
    conn.proxy options[:proxy]
    conn.adapter :net_http
  end
end

response = client.get('some_username/', proxy: URI('//111.111.111.111:8080'))

response.status # 302
response['location'] # "https://www.instagram.com/accounts/login/"

但之前,就在几天前,上面的代码按预期工作,即有 return 200 个状态和带有用户页面的正文。此外,没有代理的代码 Faraday.get('https://www.instagram.com/some_username/') 工作正常,即 returns 200 状态和带有用户页面的正文。我也尝试过其他客户的相同方法,结果相同,无需代理即可成功并使用它进行重定向。

客户端可能需要一些额外的特定配置才能使用代理?

更新

我不确定,但它看起来像是代理的问题,即 instagram 以某种方式检测到 buyed/free 代理,也许,并从代理重定向请求(我已经使用购买的代理包),因为我试过使用我自己的代理并且它有效。

Instagram 最近进行了更改。他们很可能有一些特殊的人工智能或使用一些服务来审查你的 IP 地址,你使用的是哪个 ISP,它属于 Digitalocean、OVH 等组织还是住宅,你向哪些端点发出了多少请求,你怎么样制作它们,您在上面使用了多少个帐户,以及您更改它们的速度等

现在,如果您达到 scraping instagram 的限制,您将被重定向到 LoginAndSignupPage(您可以在源代码中找到它)。请注意,在这一点上登录将不起作用 - instagram 将只是 return 429 error code,这意味着请求太多。此外,在每次这样的阻止之后,您的 IP 地址很可能更不可靠,因此如果您在阻止后再次开始抓取,它会更快地被阻止。

我想最简单的方法就是使用住宅 ip,在请求之间有足够高的延迟——比如 3-5 秒,如果你能以某种方式使用真实账户就更好了,不要过度使用它们,也试试在此期间提出任何其他请求,比如获得一些 posts,打开单曲 post 或其他东西。

您几乎可以忽略 google 上可用的任何免费 IP 代理列表,其中 99% 的 IP 都被禁止,与来自 Digitalocean、OVH 等的 IP 几乎相同,其中许多也被阻止.

instagram 确实很难绕过,您需要经常轮换代理以避免阻塞。尝试 https://rapidapi.com/neotank/api/instagram130 缓解这种情况 - 它会为您轮换代理..