在没有 "Instagram Graph Api" 的情况下获取 instagram 完整个人资料信息
Get instagram full profile information without "Instagram Graph Api"
我想从 Instagram 用户那里获取一些数据。
所以我使用了 Instagram Basic Display Api,我可以收到的配置文件数据是这些:
- 用户名
- 媒体数
- 账户类型
但我想要这些数据:
- 用户名
- 名字
- 媒体数
- 个人资料图片
- 关注者人数
- 关注计数
我不知道如果没有 Instagram Graph API(以任何方式)在 c# 中如何获得这些数据?
或者有什么方法可以使用 WebClient
class 或类似的方法获取这些数据?
@Eehab 回答的更新: 我在这个例子中使用了 RestClient
和 WebClient
,它们都给出了相同的结果。
现在看WebClient
例子:
WebClient client = new WebClient();
string page = client.DownloadString("https://www.instagram.com/instagram/?__a=1");
Console.WriteLine(page);
Console.ReadKey();
并查看此代码的图像 here。
现在看看上面代码的结果here
我还知道,这个 link 是登录用户的唯一访问权限,我已经在 chrome 登录了我的 Instagram 帐户,但我认为 WebClient
也需要登录。
通过@Eehab 回答编辑:
在这种情况下使用此 Url(https://www.instagram.com/{username}/?__a=1),如果没有 Instagram 登录浏览器配置文件,我们将无法使用。因此,我们应该使用 selenium 登录 Instagram,并使用登录的 cookie 将其用于 Url 请求。所以首先安装 selenium 网络驱动程序然后编写以下代码(未经测试):
var driver = new ChromeDriver();
//go to Instagram
driver.Url = "https://www.instagram.com/";
//Log in
var userNameElement = _driver.FindElement(By.Name("username"));
userNameElement.SendKeys("Username");
var passwordElement = _driver.FindElement(By.Name("password"));
passwordElement.SendKeys(Cars[0].auth.pass);
var loginButton = _driver.FindElement(By.Id("login"));
loginButton.Click();
//Get cookies
var cookies = driver.Manage().Cookies.AllCookies.ToList();
//Send request with given cookies :)
var url = "https://www.instagram.com/{username}/?__a=1";
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
foreach(var cookie in cookies){
httpRequest.Headers["Cookie"] += $"{cookie.Name}={cookie.Value}; ";
}
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
//...
如果有人可以改进这个问题以获得更多用途可以编辑,我真的很感激:)
您可以使用开放 API 来做到这一点,例如:
https://www.instagram.com/instagram/?__a=1
来自邮递员代码的示例代码:
var client = new RestClient("https://www.instagram.com/instagram/?__a=1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
您也可以使用 HttpClient class,如果您想使用 WebClient,您可以使用
WebClient.DownloadString 方法虽然我不建议使用 WebClient 进行此抓取,但请记住,如果 Instagram 阻止了你,可能会阻止你,你需要住宅代理来绕过阻止。
响应将是 json data ,使用 Json.Net 或类似的库对其进行反序列化。
只需在给定 url 中将 instagram 替换为您想要的任何用户名即可。
我想从 Instagram 用户那里获取一些数据。
所以我使用了 Instagram Basic Display Api,我可以收到的配置文件数据是这些:
- 用户名
- 媒体数
- 账户类型
但我想要这些数据:
- 用户名
- 名字
- 媒体数
- 个人资料图片
- 关注者人数
- 关注计数
我不知道如果没有 Instagram Graph API(以任何方式)在 c# 中如何获得这些数据?
或者有什么方法可以使用 WebClient
class 或类似的方法获取这些数据?
@Eehab 回答的更新: 我在这个例子中使用了 RestClient
和 WebClient
,它们都给出了相同的结果。
现在看WebClient
例子:
WebClient client = new WebClient();
string page = client.DownloadString("https://www.instagram.com/instagram/?__a=1");
Console.WriteLine(page);
Console.ReadKey();
并查看此代码的图像 here。
现在看看上面代码的结果here
我还知道,这个 link 是登录用户的唯一访问权限,我已经在 chrome 登录了我的 Instagram 帐户,但我认为 WebClient
也需要登录。
通过@Eehab 回答编辑:
在这种情况下使用此 Url(https://www.instagram.com/{username}/?__a=1),如果没有 Instagram 登录浏览器配置文件,我们将无法使用。因此,我们应该使用 selenium 登录 Instagram,并使用登录的 cookie 将其用于 Url 请求。所以首先安装 selenium 网络驱动程序然后编写以下代码(未经测试):
var driver = new ChromeDriver();
//go to Instagram
driver.Url = "https://www.instagram.com/";
//Log in
var userNameElement = _driver.FindElement(By.Name("username"));
userNameElement.SendKeys("Username");
var passwordElement = _driver.FindElement(By.Name("password"));
passwordElement.SendKeys(Cars[0].auth.pass);
var loginButton = _driver.FindElement(By.Id("login"));
loginButton.Click();
//Get cookies
var cookies = driver.Manage().Cookies.AllCookies.ToList();
//Send request with given cookies :)
var url = "https://www.instagram.com/{username}/?__a=1";
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
foreach(var cookie in cookies){
httpRequest.Headers["Cookie"] += $"{cookie.Name}={cookie.Value}; ";
}
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
//...
如果有人可以改进这个问题以获得更多用途可以编辑,我真的很感激:)
您可以使用开放 API 来做到这一点,例如:
https://www.instagram.com/instagram/?__a=1
来自邮递员代码的示例代码:
var client = new RestClient("https://www.instagram.com/instagram/?__a=1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
您也可以使用 HttpClient class,如果您想使用 WebClient,您可以使用 WebClient.DownloadString 方法虽然我不建议使用 WebClient 进行此抓取,但请记住,如果 Instagram 阻止了你,可能会阻止你,你需要住宅代理来绕过阻止。
响应将是 json data ,使用 Json.Net 或类似的库对其进行反序列化。
只需在给定 url 中将 instagram 替换为您想要的任何用户名即可。