코드 중간에 if, break문을 써놓은 부분은 게시물을 크롤링해오던 중 중간에 갑자기 한 달 전 게시물이 뜬금없이 들어가있어서 뒤 게시물과 날짜가 같으면 break하도록 작성했습니다. 대부분의 게시글은 분,시간 단위로 올라와서 날짜로 비교해도 상관없을 것 같습니다. Show 다만 이렇게 날짜를 비교하는 코드를 넣으니 속도가 너무 느려져셔 개선해야 할 것 같습니다. 난 1학년이니까 아무것도 모를 수도 있지라고 생각한게 엊그제 같은데 벌써 3학년이 끝났다. 하지만 졸업을 하려면 졸업작품을 만들어야하니까 이제부터 전공이랑 조금 더 친해지려고 velog도 가입했으니까ㅎㅎ 종강한 게으른 몸을 이끌고 어제 처음으로 이미지 크롤링을 시도해봤다. 👇🏻 무지한 저에게 한줄기 희망같았던 영상 selenium, beautifulsoup4 설치먼저 코드를 작성하기 전에 해야할 일
실습 준비
인스타그램 해시태그 주소 확인하기인스타그램에서 #아이유를 검색하면 이렇게 예쁜 아이유가 잔뜩 나온다. 인스타그램 #아이유 주소
이 주소에서 /아이유/라는 부분은 컴퓨터가 알 수 없기 때문에 아스키코드로 변환해줘야한다.
이 친구이다. url 저장우리가 원하는 태그의 url이 다 다르기 때문에 url은 계속 바뀌게 된다.
원하는 페이지 가져오기인스타그램에서 보이는 모든 게시글들은 아래와 같이 자바스크립트로 되어있기 때문에 단순히 beautifulsoup만으로는 페이지를 가져올 수 없다. 이때 사용하는 친구가
강의에서는 크롬을 썼지만 난 사파리를 쓰기 때문에 크롬만 사파리로 스을쩍 바꿔줬다.
이렇게 하면 인스타그램에서 내가 입력한 태그를 검색한 창을 가져오기까지가 끝났다. beautiful과 urlopen을 이용할 때는 urlopen으로 url을 열고 read를 한 다음에 beautifulsoup으로 분석을 했다. selenium을 사용할 때는 driver.page_source를 사용
이미지 가져오기페이지 소스보기를 통해 이미지 하나를 나타내는 클래스를 찾아본다. 글씨가 작아서 잘 안보이겠지만
라고 쓰여있다. soup에서 'v1Nh3 kIKUG _bz0w'를 찾아서 select를 한다.
-> 가져온 페이지에서 이러한 태그를 가진 거를 불러와서 저장함 driver가 뜨는 시간이 좀 걸리기 때문에 몇초 쉬었다가 분석을 시작한다는 의미
driver를 열고 3초 쉬었다가 분석 시작 이미지 가져오기 및 저장페이지 소스에서 태그를 타고 쭈우우욱 내려가보면 img alt라는 친구가 보인다. 이 친구가 이미지를 갖고 있다. 우리는 이 중에서 src를 가져오면 된다. 이미지를 저장할 img 폴더를 실행 파일이 있는 폴더에 미리 만들어 준다. 💻 프로그램 코드
실행결과캐주얼룩을 검색했을 때 요렇게 이쁘게 저장된 걸 확인할 수 있다. 웹크롤링 프로젝트 (java) 인스타그램 좋아요 매크로 프로그램 만들기 (java-selenium, chrome driver) 한지 ・ 2021. 8. 4. 2:04 URL 복사 이웃추가 본문 기타 기능 공유하기 신고하기
//현 게시글 내용에는 없지만 exception 처리 필요 //크롬 웹드라이버, 셀레니움 설치작업 필요(이전 게시물 참고) //window 환경 우선 인스타는 사람손으로 좋아요를 많이눌러도 막기 때문에 counting으로 수를 적당히 조절해주어야 한다. (;;; 매우 깐깐스) 첫 페이지 경로를 base_url 로 지정해 웹을 열어준다. 웹 열리는 시간을 고려하여 타임 딜레이를 준다. private String base_url("https://www.instagram.com/"); driver.get(base_url); Thread.sleep(2000); 이젠 로그인 되어있다고 가정 후 진행한다 (*로그인 자동화 코드들은 구글링하면 많이 나오니 참고) 우선 인스타그램에서 원하는 태그를 검색한다. 검색 후 url을 보면, 경로가 보인다. 이걸 그대로 다시 get 메서드로 긁어온다. driver.get("https://www.instagram.com/explore/tags/맞팔"); 이렇게 get 메서드로 주소를 주면 알아서 검색이 된 페이지가 열린다. 이제 가장 첫 번째 사진을 클릭한다. f12로 해시태그 검색된 페이지의 html 코드를 분석해 첫 번째 사진 요소를 찾는다. 해당 div 클래스가 _9 ~~ 라고 나오고 있다. 이것을 cssSelector로 가져와 클릭시킨다. 모든 사진이 해당이므로 elements로 가져와 인덱스 설정해주어야 한다. n번째 사진으로도 시작 설정 가능 (;;;와이파이라 로딩이 좀 걸려서 슬립을 길게 걸어주었다. 이건 상황에 맞게 조정해주기) Thread.sleep(7000); driver.findElements(By.cssSelector("div._9AhH0")).get(0).click(); 사진이 클릭되면 다음과 같이 창이 나오는데, 좋아요 -> 다음 클릭을 반복시켜야 하므로 클릭 요소를 찾아주어야 한다. '좋아요' 버튼의 주변 코드들을 분석해보면, 세 개 요소 중 첫번째의 클래스 인 것이 보인다. driver.findElement(By.className("fr66n")).click(); 클래스네임으로 요소를 찾아 클릭시켜 좋아요를 눌러준다. 다음 버튼은 한줄짜리.. 링크 요소 a 클래스 중 '다음'은 딱 하나라서 text로 쉽게 찾아진다. driver.findElement(By.linkText("다음")).click(); 다음 버튼을 클릭해준다. 이제 반복문으로 코드를 묶어 클릭 중간중간 슬립을 랜덤으로 적당히 걸어주고, 설정 카운트 다 되면 break 걸도록 코드를 구성한다. 계속하면 막히기 때문에 10개마다 긴 슬립을 걸어 텀을 주었다. if(count >= count_setting)break; if(count % 10 == 0) Thread.sleep((long) (10000+n)); 완료 후 드라이버 종료까지 해준다. driver.quit(); 매크로 진행 영상 움짤 입니닷 태그는 내가 사랑하는 bigbangtheory 로 진행했다 ^8^ 태그 취소 확인 ` 공감 이 글에 공감한 블로거 열고 닫기댓글 3 이 글에 댓글 단 블로거 열고 닫기 인쇄 댓글쓰기 1/1 이전 다음 이 블로그 웹크롤링 프로젝트 (java) 카테고리 글전체글 보기웹크롤링 프로젝트 (java)글 목록글 제목작성일 화면 최상단으로 이동 이 블로그 인기글이 블로그 인기글글 제목작성일 화면 최상단으로 이동 이 블로그 인기글화면 최상단으로 이동 |