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

O.V*_*hor 2 ruby proxy parsing instagram

我需要在没有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/"
Run Code Online (Sandbox Code Playgroud)

但是以前,就在几天前,上面的代码按预期工作,即返回200状态和带有用户页面的正文。此外,Faraday.get('https://www.instagram.com/some_username/')没有代理的代码可以正常工作,即返回200状态和带有用户页面的正文。我还尝试了其他客户端的相同操作,并且在没有代理的情况下取得了相同的成功,并使用它进行了重定向。

客户端需要一些其他特定的配置来使用代理,也许吗?

更新

我不确定,但这似乎是代理的问题,例如instagram以某种方式检测到已购买/免费的代理,并从多数民众赞成代理重定向请求(我已经使用了购买的代理包),因为我尝试使用我自己的代理,就可以了。

Jur*_*uri 5

Instagram最近进行了更改。他们很可能拥有一些特殊的AI或使用某些服务来检查您的IP地址,使用的ISP,是属于Digitalocean,OVH等组织还是住宅组织,您对哪些端点发出了多少请求,您如何制作它们,使用多少个帐户以及更改它们的速度等。

现在,如果您达到了废弃instagram的极限,您将被重定向至LoginAndSignupPage(您可以在源代码中找到它)。请注意,此时登录将不起作用-instagram只会返回429 error code,表示请求过多。同样,在每个此类阻止之后,您的IP地址最有可能变得不那么可靠,因此,如果您在阻止之后再次开始抓取,它将更快地被阻止。

我猜最简单的方法就是使用请求之间足够高的延迟(例如3-5秒)的住宅ip,如果可以使用某种真实帐户,并且不要过度使用它们,以及尝试进行任何其他请求,则更好。同时,例如获得一些帖子,打开单个帖子或其他内容。

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