Следующий код работает на компьютере для очистки данных из учетной записи 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)