프로젝트 및 실습/Selenium

[Selenium] 인스타그램 해쉬태그 크롤링 (2) - 크롤링 및 시각화

jooona 2021. 8. 11. 11:45
반응형

인스타그램 자동 로그인까지는 이전 게시물을 참조하시면 됩니다. 

 

https://jooona.tistory.com/146

 

[Selenium] 인스타그램 해쉬태그 크롤링 (1) - 인스타그램 로그인

오늘은 Selenium을 이용한 인스타그램 해쉬태그 크롤링을 실행해보도록 하겠습니다. 이번 글에서는 인스타그램 자동 로그인을 하는 방법에 대해서 우선 알아보겠습니다. 1 2 3 from selenium import web

jooona.tistory.com

 

이제 검색할 키워드를 설정해야겠죠?

 

1
2
_keyword = 'chelsea' # 검색할 키워드
driver.get('https://www.instagram.com/explore/tags/' + _keyword + '/')
cs

 

이 코드를 실행하면 자신이 원하는 키워드를 검색한 결과 창으로 이동하게 됩니다. 저는 'chelsea'를 검색해 보았습니다.

 

 

1
2
driver.find_element_by_css_selector('div.v1Nh3.kIKUG._bz0w').click() #첫번째 게시물 열기
time.sleep(5)
cs

 

검색 결과 중 첫 번째 게시물을 여는 코드입니다.

 

 

이제 옆 게시물로 슝슝 이동하면서 해쉬태그를 크롤링 해보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
results = []
count = 200
for i in range(count):
    data = driver.find_elements_by_css_selector('a.xil3i'# 해쉬태그 정보 저장
    for j in range(len(data)):
        results.append(data[j].text.replace("#","")) # '#'없애기
    
    if (i+1)%10 == 0
        print('{}번째 게시물 완료'.format(i+1))
    driver.find_element_by_css_selector('a._65Bje.coreSpriteRightPaginationArrow').click() #다음 게시물로 이동
    time.sleep(3)
cs

 

여기서는 driver.find_elements_by_css_selector 를 이용했는데요, 전에 사용한 함수와 다르게 element가 아니라 elements를 사용한 것을 확인할 수 있습니다. 여기서 복수형을 이용한 이유는 해쉬태그가 여러 개가 있을 수 있기 때문입니다. 

 

count 변수에 자신이 방문하고 싶은 게시물의 수를 입력해주시면 됩니다. 이렇게 얻어진 해쉬태그들은 '#'을 분리시킨 후 results라는 list에 차곡차곡 들어가게 됩니다.

 

이제 시각화를 해볼까요? 

 

시각화에 대한 설명은 주석으로 대체하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import nltk
 
results_str = " ".join(results) # 결과값 list to string
tokens = results_str.split(" "# 각 단어별로 떼어 내서
text = nltk.Text(tokens) # text에 저장하고
topWord = text.vocab().most_common(30# 가장 많이 등장하는 30개의 단어를 추려낸다.
count = 30
xlist = [a[0for a in topWord[:count ]]
ylist = [a[1for a in topWord[:count ]]
    
plt.figure(figsize = (10,5)) # 그래프 크기 지정
plt.xlabel('Word'# X축 이름
plt.xticks(rotation=70# X축 라벨 회전
plt.ylabel('Count'# Y축 이름
plt.title('keyword TOP '+str(count)+' WORD')
plt.ylim([0200]) # 그래프의 Y축 크기 조절
plt.bar(xlist,ylist) # bar로 실행하면 막대그래프. plot으로 실행하면 꺾은선 그래프.
cs

 

위의 코드를 실행하면 다음과 같은 결과 그래프를 얻을 수 있습니다.

 

 

이번엔 워드 클라우드를 그려보겠습니다.

 

1
2
3
4
5
6
7
8
from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
 
wordcloud = WordCloud(max_font_size=100).generate(results_str) # word cloud
fig = plt.figure()
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
cs

 

전체 코드는 아래의 깃허브 링크에서 확인하실 수 있습니다.

 

https://github.com/JunhaLee/Selenium_practice/blob/main/Instagram_Hashtag_Crawling.ipynb

 

GitHub - JunhaLee/Selenium_practice

Contribute to JunhaLee/Selenium_practice development by creating an account on GitHub.

github.com

 

반응형