본문 바로가기

Computer/Python

Python 을 이용한 간단 크롤러 만들기

Python은 쉽고 빠르고 간단한 코딩에 최적화되어 있다고 말해도 과언이 아니다. 이 글에선 간단하게 Python 크롤러를 만들어 보는 것을 보여주도록 하겠다.


참고. Python 3.5버전 기준이다


우선 크게 세 가지 라이브러리, requests, BeautifulSoup, lxml 이 설치되어있어야 한다. 


우선 크롤링(혹은 스크래핑)할 대상을 찾아야 하는데, 여기서는 네이버 실시간 인기검색어 10위를 대상으로 해보자.





자 네이버 오른 쪽에 실시간 급상승 검색어다.


저 위에 커서를 두고 오른쪽 버튼을 누르면 요소검사(HTML문서 내에서 어떻게 표현되고 있나)를 할 수 있다 (는 크롬 기준이다).



보아하니 a태그 사이에 text로 설현이 있다. 하지만 저걸 통으로 가져오면 밑에 있는 span의 text마저 같이 딸려 올 가능성이 있다.(실제로 getText를 돌리면 그렇다)

그래서 a 태그의 attribute 인 title에 있는 것을 가져오기로 한다.



자 그럼 어떻게 저기로 접근해야할까?

처음엔 li class='up' 으로 가려 했는데 아래쪽을 보니 class='new'도 존재한다. 따라서 li 단계에서 접근하긴 힘들 것 같다.

그러면 하나 올라가서 rankup 이나 ranklist 로부터 내려오면 될 것 같다. 그 밑의 li는 모두 검색어 레벨이므로 큰 무리가 없을 것이라 판단.







크롤러를 짤 때 생각할 점

0. 크롤링의 모든 책임은 실행자에게 있음을 유념하자 (크롤링은 서버에 부하를 주는 작업이므로 불가피할 경우에만 사용하자).

1. HTML의 구조를 정확히 이해해야 한다.

2. Loop를 "잘" 설계해야함. 링크에 링크를 타고 가는 경우가 많아지면 골치가 아프다. 또한 무한루프가 돌지 않도록 조심 또 조심하자.

3. (옵션) 정규표현식(regex)를 이용하면 매우매우매우매우매우매우매우매우 도움이 된다


모르는 것은 BeautifulSoup 문서를 보면서 해결하자. 링크 : http://coreapython.hosting.paran.com/etc/beautifulsoup4.html#


아래 동영상을 보면 도움이 된다. 

https://www.youtube.com/watch?v=XjNm9bazxn8

https://www.youtube.com/watch?v=3xQTJi2tqgk