Jak zeskrobać dane z Instagrama za pomocą Pythona?
Opublikowany: 2018-10-27Jeśli miasto mówi o filmie, to musi być na YouTube, jeśli miasto szaleje z powodu artykułu, to musi być na Facebooku, a jeśli całe miasto dyskutuje o najnowszych zdjęciach, po prostu muszą być na Instagramie. Oto jak zeskrobać dane z Instagrama
Założony w 2010 r. Instagram stał się największą na świecie aplikacją do udostępniania zdjęć, a jego witryna internetowa znajduje się w 15 najlepszych witrynach Alexa. Od pierwszych dni ograniczania przesyłania zdjęć tylko 1 × 1, Instagram (przez większość uroczo nazywany „insta”) przeszedł długą drogę. W dzisiejszych czasach na Instagramie możesz przesłać prawie wszystkie media, zestaw zdjęć, filmów, dubsmashów i nie tylko. Jednak najbardziej lubianymi rzeczami na Instagramie są profile celebrytów i hashtagi. W rzeczywistości Wikipedia wymienia niektóre najlepsze profile na Instagramie - te, które mają najwięcej obserwujących na całym świecie. Liczby sięgają milionów obserwujących, którzy codziennie sprawdzają swoje posty. Jednocześnie hashtagi to kolejna ważna funkcja na Instagramie. Tworzą zestaw podobnych obrazów, a zatem jeśli ktoś szuka hashtagu na Instagramie, na pewno znajdzie obrazy z podobieństwem lub dosłownym połączeniem. Prosty przykład – „#hot” może prowadzić do obrazów płonących rzeczy, ognia, a także obrazów osób, które uważają, że są atrakcyjne.
Jak zeskrobać dane z Instagrama
Dlatego dzisiaj przyjrzymy się zbieraniu danych z Instagrama, a dokładniej z jego stron. Będziemy również sprawdzać liczbę obserwujących, liczbę osób śledzących oraz liczbę postów na niektórych topowych profilach na Instagramie. Do wykonania zadania użyjemy pliku tekstowego z linkami do profili. Możesz dodać więcej profili do listy, a program wydrukuje również szczegóły nowych wklejonych linków.
Po drugie, zeskrobujemy i zapiszemy dane do pliku tekstowego, linków obrazków o podanym przez Ciebie hashtagu. Tutaj również będziemy mieć listę słów przechowywaną w pliku tekstowym, którą przeczytamy w pytonie, a dla każdego słowa zrobimy #słowo i przeszukamy Instagram i uzyskamy linki do obrazów powiązanych z hashtagiem.
Obie aktywności będą miały pewne ograniczenia, na przykład nie można uzyskać szczegółowych informacji o profilach prywatnych, a pobrana zostanie tylko pewna liczba linków (Instagram ma limit).
Jak zwykle, zanim zaczniemy, jeszcze raz poproszę o sprawdzenie tego linku i skonfigurowanie Pythona oraz zainstalowanie edytora tekstu. Wolę atom i jeśli podążysz za linkiem, dostaniesz link i instrukcje, jak pobrać i zainstalować dla niego. Zainstaluj także wymienione pakiety Pythona za pomocą pip, zgodnie z prośbą. W przypadku, gdy poproszę o zainstalowanie kilku dodatkowych pakietów, można to zrobić w drodze.
Pobieranie danych z Instagrama najlepszych Instagrammerów
Przechodząc więc do kodu, oto link do danego programu. To, co w zasadzie zrobiliśmy, to odczytanie linków z podanego pliku tekstowego, utworzenie obiektu beautifulsoup dla wyodrębnionego html dla każdego linku i wyodrębnienie pewnych specyficznych informacji z adresu URL. Oto link do pliku tekstowego, którego użyliśmy. Oto niektórzy z najlepszych użytkowników wymienionych w Wikipedii. Wprawdzie ręcznie skopiowałem linki z Wikipedii, ale można to było również zrobić przez scraping, ale zostawię to na inny artykuł o majsterkowaniu.
[język kodu=”python”]
#!/usr/bin/python
# -*- kodowanie: utf-8 -*-
żądania importu
importuj urllib.request
importuj urllib.parse
importuj urllib.error
z bs4 importuj BeautifulSoup
importuj ssl
importuj json
klasa Insta_Info_Scraper:
def getinfo(self, url):
html = urllib.request.urlopen(url, context=self.ctx).read()
zupa = PięknaZupa(html, 'html.parser')
data = soup.find_all('meta', attrs={'property': 'og:description'
})
tekst = dane[0].get('treść').split()
użytkownik = '%s %s %s' % (tekst[-3], tekst[-2], tekst[-1])
obserwujący = tekst[0]
następujący = tekst[2]
posty = tekst[4]
drukuj ('Użytkownik:', użytkownik)
print ('Obserwatorzy:', obserwujący)
print ('Po:', po)
drukuj ('Posty:', posty)
drukuj ('—————————')
def główna(własna):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = Fałsz
self.ctx.verify_mode = ssl.CERT_Brak
z open('users.txt') jako f:
własna treść = f.readlines()
self.content = [x.strip() dla x w self.content]
dla adresu URL w treści własnej:
self.getinfo(url)
if __name__ == '__main__':
obj = Insta_Info_Scraper()
obj.główny()
[/kod]
Po zachowaniu programu i pliku tekstowego w tym samym folderze i uruchomieniu polecenia-
python insta_info_scraper.py, oto co pojawi się w wierszu polecenia-
[język kodu=”python”]
H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_info_scraper.py
Użytkownik: Selena Gomez (@selenagomez)
Obserwujący: 144,1 mln
Obserwujesz: 49
Posty: 1468
—————————
Użytkownik: Cristiano Ronaldo (@cristiano)
Obserwujący: 143,1 mln
Śledzenie: 416
Posty: 2366
—————————
Użytkownik: Ariana Grande (@arianagrande)
Obserwujący: 130,5 m
Obserwujesz: 1348
Posty: 3669
—————————
Użytkownik: Taylor Swift (@taylorswift)
Obserwujący: 112,1 mln
Obserwujesz: 0
Posty: 233
—————————
Użytkownik: <img draggable=”false” data-mce-resize=”false” data-mce-placeholder=”1″ data-wp-emoji=”1″ class=”emoji” alt=”👻” src=”https://sworg/images/core/emoji/11/svg/1f47b.svg”> neymarjr (@neymarjr)
Obserwujący: 103,4 m
Obserwujesz: 817
Posty: 4263
—————————
Użytkownik: Justin Bieber (@justinbieber)
Obserwujący: 102,5 m
Obserwujesz: 92
Posty: 4367
—————————
[/kod]
Chociaż jest to wynik wiersza polecenia, możesz zapisać szczegóły w pliku tekstowym, używając:
python insta_info_scraper.py > info.txt
co spowoduje, że dane wyjściowe trafią do pliku tekstowego, a jeszcze lepiej, możesz zapisać to wszystko w formacie json. Teraz, jak utworzyć plik json z tymi wszystkimi informacjami? Pokażę to poniżej:
[język kodu=”python”]
#!/usr/bin/python
# -*- kodowanie: utf-8 -*-
żądania importu
importuj urllib.request
importuj urllib.parse
importuj urllib.error
z bs4 importuj BeautifulSoup
importuj ssl
importuj json
klasa Insta_Info_Scraper:
def getinfo(self, url):
html = urllib.request.urlopen(url, context=self.ctx).read()
zupa = PięknaZupa(html, 'html.parser')
data = soup.find_all('meta', attrs={'property': 'og:description'
})
tekst = dane[0].get('treść').split()
użytkownik = '%s %s %s' % (tekst[-3], tekst[-2], tekst[-1])
obserwujący = tekst[0]
następujący = tekst[2]
posty = tekst[4]
info={}
info[„Użytkownik”] = użytkownik
info[„Obserwatorzy”] = obserwujący
info[„Obserwowane”] = następujące
info[„Posty”] = posty
self.info_arr.append(informacje)
def główna(własna):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = Fałsz
self.ctx.verify_mode = ssl.CERT_Brak
self.info_arr=[]
z open('users.txt') jako f:
własna treść = f.readlines()
self.content = [x.strip() dla x w self.content]
dla adresu URL w treści własnej:
self.getinfo(url)
z open('info.json', 'w') jako plik zewnętrzny:
json.dump(self.info_arr, outfile, wcięcie=4)
print(„Plik Json zawierający wymagane informacje jest tworzony……”)

if __name__ == '__main__':
obj = Insta_Info_Scraper()
obj.główny()
[/kod]
Kiedy uruchomisz ten kod, zobaczysz tylko jedną instrukcję, która jest drukowana-
[język kodu=”python”]
H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_info_scraper_json_format.py
Tworzony jest plik JSON zawierający wymagane informacje…………
[/kod]
Jednak w tym samym czasie w twoim folderze zostanie utworzony plik json o nazwie info.json-
Json będzie wyglądał tak-
[język kodu=”python”]
[
{
„Użytkownik”: „Selena Gomez (@selenagomez)”,
„Zwolennicy”: „144,1m”,
„Obserwowani”: „49”,
„Posty”: „1468”
},
{
„Użytkownik”: „Cristiano Ronaldo (@cristiano)”,
„Zwolennicy”: „143,1m”,
„Następujący”: „416”,
„Posty”: „2366”
},
{
„Użytkownik”: „Ariana Grande (@arianagrande)”,
„Zwolennicy”: „130,5m”,
„Następujący”: „1348”,
„Posty”: „3669”
},
{
„Użytkownik”: „Taylor Swift (@taylorswift)”,
„Zwolennicy”: „112.1m”,
„Następuje”: „0”,
„Posty”: „233”
},
{
„Użytkownik”: „ud83dudc7b neymarjr (@neymarjr)”,
„Obserwatorzy”: „103,4m”,
„Obserwowani”: „817”,
„Posty”: „4263”
},
{
„Użytkownik”: „Justin Bieber (@justinbieber)”,
„Zwolennicy”: „102,5m”,
„Obserwowani”: „92”,
„Posty”: „4367”
}
[/kod]
Widać, że dane są takie same, ale są w wygodniejszym i bardziej użytecznym formacie. Wszystko, co zrobiliśmy, to przechowywanie wyodrębnionych danych w innym formacie. Ale wyobraź sobie, że jeśli piszesz program lub tworzysz aplikację, która będzie wykorzystywała dane wydobyte z tysiąca profili na Instagramie, jaki rodzaj struktury danych będzie łatwiejszy do wykorzystania w Twoim kodzie? Plik json czy plik tekstowy? Czyszczenie danych jest czymś często pomijanym, ale jest to bardzo ważny krok. W rzeczywistości wielu naukowców zajmujących się danymi przyznało, że chociaż pracują nad złożonymi modelami i symulacjami, ekstrakcja danych, czyszczenie i rearanżacja stanowią prawie siedemdziesiąt procent ich pracy. Teraz musisz dowiedzieć się szczegółowo, jak zeskrobać dane z Instagrama.
Wyodrębnianie linków do obrazów dla podanych hashtagów
Zamiast informacji z kont celebrytów, głównymi zasobami Instagrama są obrazy. A czy lepszym sposobem byłoby uzyskanie obrazów w celu utworzenia klastrów i zbudowanie modelu uczenia maszynowego, niż używanie hashtagów z Instagrama i pobieranie obrazów posiadających określone hashtagi.
Oto kod, który został podany poniżej:
[język kodu=”python”]
#!/usr/bin/python
# -*- kodowanie: utf-8 -*-
żądania importu
importuj urllib.request
importuj urllib.parse
importuj urllib.error
z bs4 importuj BeautifulSoup
importuj ssl
importuj json
klasa Insta_Image_Links_Scraper:
def getlinks(self, hashtag, url):
html = urllib.request.urlopen(url, context=self.ctx).read()
zupa = PięknaZupa(html, 'html.parser')
skrypt = zupa.find('skrypt', text=lambda t:
t.startswith('window._sharedData'))
page_json = script.text.split(' = ', 1)[1].rstrip(';')
dane = json.loads(page_json)
print ('Scraping linki z #' + hashtag+”………..”)
za wpis w danych['entry_data']['TagPage'][0]['graphql'
]['hashtag']['edge_hashtag_to_media']['edges']:
image_src = post['node']['thumbnail_resources'][1]['src']
hs = otwórz(hashtag + '.txt', 'a')
hs.write(image_src + 'n')
hs.zamknij()
def główna(własna):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = Fałsz
self.ctx.verify_mode = ssl.CERT_Brak
z open('hashtag_list.txt') jako f:
własna treść = f.readlines()
self.content = [x.strip() dla x w self.content]
dla hashtagu w self.content:
self.getlinks (hashtag,
„https://www.instagram.com/explore/tags/”
+ hashtag + '/')
if __name__ == '__main__':
obj = Insta_Image_Links_Scraper()
obj.główny()
[/kod]
Do programu użyliśmy pliku tekstowego z kilkoma hashtagami, a mianowicie mustang, nature, nike, football i fifa, kilka słów wybranych losowo. Możesz zmienić słowa w pliku tekstowym lub dodać nowe słowa, które posłużą do tworzenia hashtagów, a także zostaną pobrane do nich linki do obrazów.
Kiedy uruchomisz dany program, zobaczysz to w wierszu polecenia-
[język kodu=”python”]
H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_image_link_scraper.py
Skrobanie linków za pomocą #mustang………..
Skrobanie linków z #natura………..
Skrobanie linków z #nike………..
Skrobanie linków za pomocą #football………..
Skrobanie linków za pomocą #fifa………..
[/kod]
W tym samym czasie zobaczysz 5 plików utworzonych w bieżącym folderze-
Mustang.txt, nature.txt, nike.txt, football.txt, fifa.txt
Nie przesłałem linków do tych plików, które zostały dla mnie wygenerowane, ze względów bezpieczeństwa i oczywiście po uruchomieniu programu dostaniesz inny zestaw linków - najnowsze linki związane z hashtagiem. Teraz musisz dowiedzieć się szczegółowo, jak zeskrobać dane z Instagrama.
Po co się starać?
Teraz możesz pomyśleć, po co podejmować wysiłek, dlaczego nie po prostu pobierać kilku zdjęć z google, kiedy tylko zajdzie taka potrzeba. Cóż, to zależy od tego, co chcesz osiągnąć. Jeśli potrzebujesz kilku obrazów do swojego artykułu, możesz skorzystać z obrazów google. Ale jeśli próbujesz uzyskać wszystkie obrazy związane z wydarzeniem, osobą lub czymś innym, możesz spróbować użyć hashtagu, aby uzyskać obrazy z Instagrama. W ten sposób otrzymasz ogromny zestaw obrazów, z którego możesz napisać program do usuwania tych samych i podobnych obrazów, a następnie oddzielić obrazy z tekstem i obrazy bez tekstu, a następnie odpowiednio wykorzystać oba typy obrazów do analizy.
Począwszy od SURF i SIFT (dwa najlepsze algorytmy przetwarzania obrazu), techniki rozpoznawania i przetwarzania obrazu ewoluowały w ciągu ostatnich kilku lat. Pędzące samochody, do kamer wykrywających ruch, wszystkie wykorzystują obrazy do wnioskowania. Dzięki niemal nieograniczonej podaży zdjęć na Instagramie Twój projekt badawczy może przejść długą drogę. Teraz musisz dowiedzieć się szczegółowo, jak zeskrobać dane z Instagrama.
Jak zintegrować systemy do złomowania ze swoją firmą?
Pozyskiwanie danych z witryny takiej jak Instagram, zgodnie z Twoimi wymaganiami, może okazać się męczącym zadaniem i może odwrócić uwagę od wielu ważnych rzeczy, takich jak Twoja firma. Bez doświadczonych programistów R i Python zbudowanie kompletnego systemu, który będzie pobierał dane z Instagrama zgodnie z Twoimi dokładnymi wymaganiami, może zająć miesiące, ponieważ strona internetowa ma wysoki poziom bezpieczeństwa i ciągle zmienia swój układ. Aby uzyskać kompletne rozwiązania, powinieneś zamiast tego skontaktować się z doświadczonymi zespołami zajmującymi się skrobaniem stron internetowych, takimi jak PromptCloud. Wystarczy, że podasz nam swoje wymagania, a otrzymasz dane w formacie pasującym do Twojej firmy. Oszczędza to czas, energię, pieniądze i siłę roboczą oraz pozwala podejmować trudniejsze wyzwania biznesowe, podczas gdy my martwimy się o technologię. Teraz musisz dowiedzieć się szczegółowo, jak zeskrobać dane z Instagrama.
Potrzebujesz pomocy przy wyodrębnianiu danych internetowych?
Uzyskaj czyste i gotowe do użycia dane ze stron internetowych dla aplikacji biznesowych dzięki naszym usługom web scrapingu.
Zastrzeżenie: Kod dostarczony w tym samouczku służy wyłącznie do celów edukacyjnych. Nie ponosimy odpowiedzialności za sposób jego wykorzystania i nie ponosimy odpowiedzialności za jakiekolwiek szkodliwe wykorzystanie kodu źródłowego.
