Как спарсить данные со страницы профиля insagram без API?

119
30 сентября 2021, 11:20

Нужно спарсить количество подписчиков произвольного профиля в инстаграм. По-моему это возможно сделать без авторизации и тем более API.

Я пробовал вот так:

$ch = curl_init();
$url = 'https://www.instagram.com/buzova86/';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://instagram.com');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'authority: www.instagram.com',
        'method: GET',
        'path: /buzova86/',
        'scheme: https',
        'content-length: 44',
        'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
        'accept-encoding: gzip, deflate, br',
        'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        'sec-fetch-mode: navigate',
        'sec-fetch-user: ?1',
        'upgrade-insecure-requests: 1'
        )
);
$data = curl_exec($ch);
var_dump($data);

В ответ получал

string(2539) "HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: https://www.instagram.com/accounts/login/
Vary: Accept-Language, Cookie
Content-Language: ru
Date: Thu, 24 Oct 2019 08:36:14 GMT
Strict-Transport-Security: max-age=31536000
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-Frame-Options: SAMEORIGIN
content-security-policy: report-uri https://www.instagram.com/security/csp_report/; default-src 'self' https://www.instagram.com; img-src https: data: blob:; font-src https: data:; media-src 'self' blob: https://www.instagram.com https://*.cdninstagram.com https://*.fbcdn.net; manifest-src 'self' https://www.instagram.com; script-src 'self' https://instagram.com https://www.instagram.com https://*.www.instagram.com https://*.cdninstagram.com wss://www.instagram.com https://*.facebook.com https://*.fbcdn.net https://*.facebook.net 'unsafe-inline' 'unsafe-eval' blob:; style-src 'self' https://*.www.instagram.com https://www.instagram.com 'unsafe-inline'; connect-src 'self' https://instagram.com https://www.instagram.com https://*.www.instagram.com https://graph.instagram.com https://*.graph.instagram.com https://*.cdninstagram.com https://api.instagram.com wss://www.instagram.com wss://edge-chat.instagram.com https://*.facebook.com https://*.fbcdn.net https://*.facebook.net chrome-extension://boadgeojelhgndaghljhdicfkmllpafd blob:; worker-src 'self' blob: https://www.instagram.com; frame-src 'self' https://instagram.com https://www.instagram.com https://staticxx.facebook.com https://www.facebook.com https://web.facebook.com https://connect.facebook.net https://m.facebook.com; object-src 'none'; upgrade-insecure-requests
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
x-aed: 11
Access-Control-Expose-Headers: X-IG-Set-WWW-Claim
Set-Cookie: csrftoken=M16eDI8m7VNnGPFGjxXwS7bnrajiCpMw; Domain=.instagram.com; expires=Thu, 22-Oct-2020 08:36:14 GMT; Max-Age=31449600; Path=/; Secure
Set-Cookie: rur=FTW; Domain=.instagram.com; HttpOnly; Path=/; Secure
Set-Cookie: mid=XbFifgAEAAF0VBO0hZSUdB6NI6TI; Domain=.instagram.com; expires=Sun, 21-Oct-2029 08:36:14 GMT; Max-Age=315360000; Path=/; Secure
X-FB-TRIP-ID: 1679558926
Connection: keep-alive
Content-Length: 0
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=utf-8
Date: Thu, 24 Oct 2019 08:36:14 GMT
Connection: close
Content-Length: 105

Так же пробовал к ссылке добавлять '?__a=1', чтобы получилось https://www.instagram.com/buzova86/?__a=1 Вот если перейти по этой ссылке это прям то что нужно, но пытаясь сделать все тоже самое с такой ссылкой, все равно ответ примерно тот же самый.

Answer 1

Как ни странно, у меня следующий примитивный код выдает искомое число.

$url = "https://www.instagram.com/buzova86/?__a=1";
$response = file_get_contents($url);
if($response){
    $data = json_decode($response, true);
    $followers = $data['graphql']['user']['edge_followed_by']['count'];
    print_r($followers);
}

может не стоит миллиард заголовков в запрос отправлять?

READ ALSO
Система лайков на PHP и Ajax

Система лайков на PHP и Ajax

Лайки выполняются на странице с определенным idНо на общей странице блоки лайков не работают

87
Данные из БД приходят в ASCII

Данные из БД приходят в ASCII

Пытаюсь скриптом достать данные из MySqlТам лежат кириллические строки

96
Сравнение строк c модификатором final

Сравнение строк c модификатором final

Подскажите пож-ста, почему модификатор final меняет результат сравнения?

117
выдает ClassNotFoundException если запускать через cmd.exe

выдает ClassNotFoundException если запускать через cmd.exe

Выдает: ClassNotFoundException, если запускать через cmdexe, хотя если через Eclipse все норм

185