반응형
인스타그램 자동 로그인까지는 이전 게시물을 참조하시면 됩니다.
https://jooona.tistory.com/146
이제 검색할 키워드를 설정해야겠죠?
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[0] for a in topWord[:count ]]
ylist = [a[1] for 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([0, 200]) # 그래프의 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
반응형
'프로젝트 및 실습 > Selenium' 카테고리의 다른 글
[Selenium] 인스타그램 해쉬태그 크롤링 (1) - 인스타그램 자동 로그인 (1) | 2021.08.10 |
---|