Парсинг Instagram - PullRequest
       58

Парсинг Instagram

1 голос
/ 16 июня 2020

Следующий код работает на компьютере для очистки данных из учетной записи Instagram. Когда я пытаюсь использовать его на VPS-сервере, я перенаправляюсь на страницу входа в Instagram, поэтому сценарий не работает.

Почему Instagram не реагирует одинаково, когда я нахожусь на компьютере или на сервере?

То же и с wget. На компьютере у меня есть страница профиля, на сервере меня перенаправляют на страницу входа.

import requests
import re


class InstagramScraper:
    """
    Scraper of Instagram profiles infos.
    """

    def __init__(self, session: requests.Session, instagram_account_name: str):
        self.session = session
        self._account_name = self.clean_account_name(instagram_account_name)
        self.load_data()

    def load_data(self):
        #print(self._account_name)
        response = self.session.get("https://www.instagram.com/{account_name}/".format(account_name=self._account_name))
        #print(response)
        #print(response.text)
        publications_regex = r'"edge_owner_to_timeline_media":{"count":(\d*),'
        self._publications = re.search(publications_regex, response.text).group(1)

        followers_regex = r'"edge_followed_by":{"count":(\d*)'
        self._followers = re.search(followers_regex, response.text).group(1)

        # title_regex = r'"@type":".*","name":"(.*)",'
        title_regex = r'"full_name":"(.*)",'
        self._title = re.search(title_regex, response.text).group(1)
        self._title = self._title.split('\"')[0]

        following_regex = r'"edge_follow":{"count":(\d*)}'
        self._following = re.search(following_regex, response.text).group(1)

    def clean_account_name(self, value) -> str:
        """
        Return the account name without the url address.
        """
        found: str = re.search("https://www.instagram.com/(.*)/", value)
        if found:
            return found.group(1)
        return value

    @property
    def publications(self) -> int:
        """
        Number of publications by this account.
        """
        return self._publications

    @property
    def followers(self) -> int:
        """
        Number of followers of this account.
        """
        return self._followers

    @property
    def title(self) -> str:
        """
        Name of the Instagram profile.
        """
        return self._title

    @property
    def account(self) -> str:
        """
        Account name used on Instagram.
        """
        return self._account_name

    @property
    def following(self) -> int:
        """
        Number of accounts this profile is following.
        """
        return self._following

    def __str__(self) -> str:
        return str({
            'Account': self.account,
            'Followers': self.followers,
            'Publications': self.publications,
            'Following': self.following,
            'Title': self.title,
        })


if __name__ == "__main__":
    with requests.session() as session:
        scraper = InstagramScraper(session, "https://www.instagram.com/ksc_lokeren/")
        print(scraper)

1 Ответ

0 голосов
/ 25 июня 2020

Это могло быть потому, что вы вошли в систему со своими учетными данными на своем компьютере? furas упомянул черный список, но если вы никогда раньше не запускали его на этом сервере, я сомневаюсь в этом. имитирует обычный браузер и позволяет перемещаться по веб-сайтам. Вы должны смоделировать логин со своими учетными данными, затем получить csrftoken и sessionid из файлов cookie и закрыть браузер.

Я сделал свой в javascript, поэтому я не могу показать его вам, но лог c это:

  1. Создайте свой браузер без головы

  2. Установите заголовок 'accept-language' вашего запроса на 'en- US '

  3. Перейдите к https://www.instagram.com/accounts/login/. Дождитесь простоя

  4. Эмулируйте вход с вашими учетными данными. Ищите:

    'input[name="password"]' //for the password.

    'input[name="username"]' //for username.

    'button[type="submit"]' //for the login button

  5. Дождитесь простоя

  6. Получить все файлы cookie и получить csrftoken и sessionid

  7. Закройте браузер без головы

Затем при выполнении любого запроса to https://www.instagram.com/{account_name}/, не забудьте указать файлы cookie csrftoken и sessionid в заголовке запроса. Через некоторое время он истечет, вам нужно будет перезапустить

...