일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- listdir
- Coding
- 프리워커스
- 위코드
- 프로그래밍폰트
- 코딩
- 오블완
- vscode설치
- wecode
- dangerouslySetInnerHTML
- phython
- dumpdata
- 티스토리챌린지
- 파라미터
- Web
- SSAFY
- 역사
- loaddata
- Python
- CSS #HTML #코드
- 싸피
- VSCode
- HTML
- comprehension
- 파이썬
- TIL #todayilearn #math #javascript #js #자바스크립트 #절댓값 #최댓값 #랜덤 #random #floor
- django
- html #css #코딩 #입문 #코딩시작하기 #코딩입문 #파이썬 #자바스크립트 #비전공자 #비전공 #코딩학원
- LIST
- CSS
- Today
- Total
당신의 친절한 이웃, 코딩맨
#29 Python - lazy loading, javascript로 링크가 되있는 사이트 크롤링하기 본문
#29 Python - lazy loading, javascript로 링크가 되있는 사이트 크롤링하기
이웃집 친구 2020. 7. 26. 15:07어떤 화장품 사이트를 크롤링하는데, 제품들이 레이지 로딩으로 되어있기 때문에 한번에 크롤링을 할 수 없었다..
또한 a tag의 href 어트리뷰트가 자바스크립트로 되어있기 때문에 셀레니움으로 크롤링을 했다.
기본적으로 driver.find_element_by_class_name 등으로 접근을 했고,
두가지의 find 매서드를 한줄에 써서 좀더 구체적인 접근도 가능했다.
예)
image_url = driver.find_element_by_class_name('banner_img').find_elements_by_tag_name('a')
이렇게 두가지로 파인드도 가능하다
윗 코드의 끝에 보면 elements인데 elements하면 a 태그를 갖는 모든 태그들을 '리스트'로 갖고 오게 된다.
하지만 print(image_url)을 하면 리스트로 보이는 것이 아닌, webelement로 보이게 되는데, 출력해서 확인하고 싶거나 그 태그들의 내용을 하나하나 갖고오고 싶으면 반복문을 돌리면서 .text를 찍어서 보는 것이 가능하다. 출력도 가능하고 변수명으로 저장하는 것 또한 당연 가능하다.
get_attribute('href')등으로도 a태그들의 내용을 크롤링 하는 것 또한 가능하고, 어떻게 크롤링을 할지는 본인의 개인 케이스 바이 케이스, 사이트 바이 사이트이니, 어떻게 접근하는지는 본인 마음의 여부에 달렸다.
다음 문제는 레이지 로딩인데, 셀레니움 KEY_DOWN 메소드를 이용해서 END 버튼을 눌러주는 효과를 time.sleep 의 적절한 초단위의 시간을 넣어서 모두 내리게 한다음 크롤링을 시작하면 드디어 레이지 로딩이 구현된 사이트에서 모든 태그들의 크롤링을 시작할 수 있다.
url들이 자바스크립트로 묶여있는데, 내 경우에는 그 속에 괄호에 숫자 네 자리가 클릭해서 들어갔을때 끝의 도메인의 숫자였기 때문에 그 유알엘 코드들을 크롤링해온 text들에서 for 반복문을 또 돌려서 슬라이싱 해서 리스트에 저장하고, driver.get(domain.com/f'{i}' 이런 식으로 도메인을 바꿔가면서 들어가서 상세정보들을 크롤링해왔다.
1. 레이지 로딩은 셀레니움의 KEY_DOWN 'END'로 다 내리고 크롤링 시작
2. url의 자바스크립트 내용의 반복되는 숫자를 유심히 보고, 도메인의 사이트들에 직접 driver.get('') 으로 사이트를 들어가는 식으로 한다.
이때, 왜 상세페이지에 들어 갔다가 뒤로 가면 안되냐면, 뒤로 가기 버튼을 누르게 구현하면 다시 레이지 로딩을 해야하기때문에 크롤링하는데 반백년 이상 걸릴 수 있기 때문이다.
3. 들어가서 상세페이지들을 크롤링한다.
4. 끝!
정말 이렇게 복잡하게 크롤링한적이 없는데 크롤링을 다하니까 파일이 200줄이 넘는 코딩이 나와버렸다... 덕분에 정말 많은 걸 배울 수 있는 크롤링이고 왜 알고리즘이 중요하고 , 회사에서 코딩테이스트를 보는지 몸소 체험해 볼 수있는 기회였다.
'Today I Learn (TIL)' 카테고리의 다른 글
#31 CSS - 스타일 적용 순서 (0) | 2020.08.10 |
---|---|
#30 html - input 태그의 요소들 정리 (0) | 2020.08.10 |
#28 Python - Django의 전체적인 플로우 (0) | 2020.07.26 |
#27 Python - Json으로 된 파일에 접근해서 값 가져오기 (0) | 2020.07.24 |
#26 Git - Reset, Revert (0) | 2020.07.18 |