먼저 웹 크롤러는 웹페이지의 자료들 중에 원하는 자료만 가공해 자동적으로 가져오는 것을 의미한다.
본격적으로 파이썬으로 웹 크롤러를 만들기에 앞서 미리 해줘야하는 것들이 있는데,
사용할 모듈을 다운로드 받아야 한다.
웹 크롤러는 bs4 모듈과 requests 모듈이 필요하다.
아래 사이트를 참고해 다운로드 받았다.
bs4 모듈은 html파일을 가져올 때 사용하고, requests 모듈은 웹에 있는 소스를 가져올 때 사용한다.
관련 예제는 아래 사이트를 참고하면 된다.
twpower.github.io/84-how-to-use-beautiful-soup
모듈을 다운받은 후 이제 네이버 실시간 검색어 크롤링을 하려는데,
( //주의 // 아래 내용부터는 구글링해서 찾은 코드를 해석한내용이다. )
구글링 해보면 네이버 사이트 들어가서 F12 누르고 실시간 검색어의 태그와 클래스를 찾는 방법이 많았다.
근데 네이버에 들어가면
이렇게 검색어가 안뜨고 검색어 필터 설정을 개인이 해서 사용자 맞춤 실시간 검색어를 제공하고 있었다.
그래서 기존 크롤링 방법이 아닌 다른 방법으로 해야할 것 같아 더 찾아보았다.
관련해서 구글링 해 본 결과 인프런 QnA에 해결법이 나와있었다.
www.inflearn.com/questions/22012
위의 코드를 실행해보니 문제 없이 네이버 실시간 검색어가 크롤링 된 것을 확인할 수 있었다.
하지만 7번째 줄인
json = requests.get('https://www.naver.com/srchrank?frm=main').json()
부분이 잘 이해가 안갔다.
해당 링크로 들어가면 실시간 검색어가 나열되어 있었는데 어떻게 이 사이트를 알아낸 건지 알 수가 없었다.
주석 설명처럼 데이터를 json 형태(키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷)로 받아온 것 같은데
그래서 이렇게 뜨는가 보다
json.get("data")로 데이터 항목의 값만 추출해서 ranks에 넣고
반복문 사용해서 순위랑 검색어를 가지고 print 해줘서
이렇게 뜨는 것 같다 ..
그래도 100% 이해는 못해서 다른 방법을 더 찾아보았다.
그러다 찾은 방법은
1. 네이버 메인 홈페이지가 아닌 실시간 검색어를 관리하는 곳에서 크롤링 하기
2. 유저 정보를 설정해 컴퓨터가 아니라 사람이라는 것을 알려주기
두 가지 방법을 충족시켜 크롤링을 하는 것이다.
이렇게 모듈을 임포트 해주고
유저 설정을 해줘야한다.
이 유저 설정은 사람이라는 것을 알려줄 수 있는 것인데
headers(접속하는 사람/ 프로그램에 대한 정보를 가지고 있는 부분) 정보에 User-Agent를 넣어주면 사람이라는 것을 나타낸다.
유저정보는 얻을 수 있는 사이트가 있다고 하는데 맨 아래 링크를 참고해 작성하였다.
url은 네이버 메인 홈페이지가 아닌 실시간 검색어를 관리하는 DataLab 사이트를 연결했다.
그리고 응답 객체인 res에 내가 준 url(네이버 DataLab 사이트)과 파라미터(headers)를 requests 모듈을 엮었다.
일련의 문자열만 가지고는 원하는 데이터를 이쁘게 가지고 올 수 없기 때문에 BeautifulSoup을 이용한다.
위에서 요청해서 받은 res를 사용하는데 이때 주의점은 뒤에 content를 붙여주어야 한다.
content는 응답 데이터를 바이트로 리턴하는 속성이라고 하는데 아마 res가 응답 객체여서 붙여줘야되는 것 같다.
BeautifulSoup을 통해 soup이라는 객체로 저장을 한다.
그리고 데이터 변수를 만드는데
soup 변수 내부에서 span 메타의 item_title 클래스를 가지고 있는 문자열들을 다 select 해서 가지고 온다.
span메타와 item_title 클래스를 가지고 오는 이유는
빨간 줄 친 부분을 보면
검색어 1위와 2위 모두 공통적으로 span과 item_title을 가지고 있는 것을 볼 수 있다.
이는 실시간 검색어가 가지고 있는 메타 태그와 클래스이다.
마지막으로 반복문을 사용해 실시간 검색어를 출력해주면 된다.
총 코드는 아래와 같다.
실행화면
잘 작동이 되었다.
참고)
예전 크롤링 방법
새로운 크롤링 방법
용어 정리
blog.naver.com/kiddwannabe/221177292446
파이썬 requests 모듈 정리
dgkim5360.tistory.com/entry/python-requests
'language > python' 카테고리의 다른 글
[Python] 네이버 웹툰 날짜별 만화들 파싱해서 리스트 띄우기 (0) | 2020.09.29 |
---|---|
[Python] pwntools 기능 공부 및 정리 (0) | 2020.09.15 |
[Python] GUI 계산기 만들기 (0) | 2020.09.08 |
[Python] 소켓프로그래밍으로 1:1 채팅 구현 (0) | 2020.09.08 |
댓글