노마드코더(nomadcoder.co)에서 니꼬쌤에게 배운 파이썬으로 혼자 로켓펀치 스크래퍼를 만들어봤다.
첨엔 강의에서 배운대로 따라하면 금방 만들겠지(?)라는 생각으로 재밌겠다고 시작했다.
허나 왠걸, 로켓펀치는 자바스크립트(를 사용한 것 같다)를 통해 브라우저에서 페이지를 로딩하는 것 형식이라
indeed나 stackoverflow와 다르게 requests만으로 html소스를 가져올 수가 없었다.
pagination에서 마지막 페이지를 가져오는 것조차
아예 긁어와지지 않는다면 처음부터 다른 방법을 찾았을텐데 난 내가 css selector를 잘못 선택한 줄 알았다.
근데 오히려 지금 생각해보면, 어떨때는 html 태그가 가져와지는 것 자체가 css selector 문제는 아니란거네.
암튼, 그래서 찾아보니 자바스크립트를 통해 페이지 요소를 보여주는 사이트는 requests만으로 가져와지지 않아
셀레니움을 통해 브라우저를 사용해 창을 연것처럼 사이트를 속여야(?)한다는 것이다.
셀레니움을 통해 스크래퍼를 만드는건 Beomi's tech blog(https://beomi.github.io/)를 참고했다.
인터넷에서 자료를 찾아 공부할 수 있는 시대에 태어난건 축복이다..ㅠㅠ
(링크가 문제가 될 시 삭제하겠습니다)
여차저차 셀레니움을 통해 코드를 짰으나 여전히 html 태그들이 안가져와진다....
또 열심히 검색하다보니 셀레니움의 강력한 wait기능을 알게 됐다.(!!!!)
우리가 페이지를 열었을때 일정 시간이 지나고 페이지 요소들이 브라우저에 띄워지는데,
요거랑 비슷하게 셀레니움이 해당 url에 접속해 특정 요소가 화면에 띄워질때까지 기다리도록 하는 것이다.
셀레니움에는 두 가지 wait가 있는데
Implicitly wait와 Explicitly wait가 그것이다. 전자는 시간으로 설정 후자는 조건으로 설정.
물론 전자도 로딩이 완료되었다면 바로 다음 코드를 수행한다.
나의 경우는 explicitly wait로
pagination이 로딩될때까지 기다리도록 하고 해당 div 태그를 가져오는 식으로 해결했다.
리퀘스츠보다 셀레니움이 훨씬 강력하긴 하다.
-
스크래퍼를 만들고 csv로 그때그때 결과물을 볼 수는 있게되니 db구축이나 텔레그램 알림도 욕심이 난다.
확실히 뭔가 만들어보면서 문제를 해결하는 과정에서 지식도 체화되고 실력도 성장하는 느낌이 강한듯.
더 나은 기능들을 넣기 위해 공부 의지도 불태울수 있고.
'개발 > 파이썬' 카테고리의 다른 글
세번의 도전끝에 졸업한 파이썬 챌린지 (0) | 2021.07.26 |
---|---|
[파이썬] format 함수 속 튜플 (0) | 2021.05.13 |
[파이썬] 노마드코더 파이썬 챌린지 3일만에 실패ㅠ.ㅠ (0) | 2021.05.06 |