안녕하세요!
오늘은 스틱코드를 이용하여 '네이버 뉴스' 제목과 링크를 크롤링 해보겠습니다.
시작 전 준비 환경
1. Python
2. Requests
3. BeautifulSoup
1. 환경 설치(OS : Ubuntu)
먼저 파이썬 설치 진행하겠습니다.
터미널을 열고 아래 명령어를 실행해 주세요.
'sudo apt-get install python3'
이미 설치되어 있는 경우 위와 같이 표기 됩니다.
'python3 -V' 를 입력하시면 설치된 버전을 확인 하실 수 있습니다.
다음으로 'Requests', 'BeautifulSoup' 라이브러리를 설치하도록 하겠습니다.
터미널에 아래 명령어들을 입력해주세요.
'pip3 install requests'
'pip3 install beautifulsoup4'
설치가 완료 되셨다면
'pip3 list' 를 입력하여 설치가 되었는지 확인 하실 수 있습니다.
2. URL 요청
먼저 크롤링 하고자 하는 사이트(네이버 뉴스 검색)의 URL 요청 구조가 어떻게 되는지 확인해 보겠습니다.
검색 창에 '스틱코드'를 검색 했을때
'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=스틱코드' 라고 나옵니다.
GET 방식의 URL을 분리를 하였을 때 아래와 같이 분리가 되고
* https://search.naver.com/search.naver
* where=news&sm=tab_jum&query=스틱코드
각 파라메터 값을 분리하여
* where=news
* sm=tab_jum
* query=스틱코드
다음과 같은 파라메터 값이 필요하다는 것을 파악 할 수 있습니다.
여기서 저희는 '검색어'만 변경하여 가져올 예정이기에 'query' 부분을 바꿀수 있도록 코드를 작성할 예정입니다.
먼저 설치한 라이브러리 'requests' 와 'BeatifulSoup'을 import 하고
요청 URL을 만드는 과정과 요청 및 데이터 출력을 해보도록 하겠습니다.
위에서 검색 시 필요한 파라메터 값은 'query' 인것을 찾았습니다.
프로그램 시작 시 input 으로 키워드를 받고 URL에 적용 되도록 합니다.
검색어 입력 후 requests 모듈에 URL 을 적용 후 출력 하도록 합니다.
requests.get()은 해당 URL에 GET 방식으로 요청하겠다는 의미입니다.
POST 방식으로 원하신다면 requests.post()에 URL과 key, value 형태로 POST 값을 해더에 담아 보내주시면 됩니다.
이 부분은 다음에 좀 더 자세히 다뤄보도록 하겠습니다.
위 코드를 실행하면 '검색 키워드를 입력하세요' 부분에서 사용자의 입력을 기다리게 되며
'스틱코드' 를 입력하고 엔터를 누르게 되면
요청한 URL의 문서가 찍혀 나오는 것을 보실 수 있습니다.
3. 파싱
위 방법대로 사용한다면 어디에 어떤 내용이 있는지 찾는데 너무 복잡할 것입니다.
그래서 파싱 과정을 진행할 것인데요
BeautifulSoup을 이용하여 뉴스의 제목과 링크만 가져올 수 있도록 할 예정입니다.
크롬 웹 브라우저에서 'F12'를 누르면 '개발자 도구'가 켜지는데요
개발자 도구 왼쪽 위에 보시면 페이지의 요소 선택을 해주는 버튼이 있습니다
버튼을 누른 후 웹페이지 화면에 마우스 커서를 가져가면
오른쪽 개발자 모드에 문서 내 해당 요소 내용을 표기해줍니다.
'a 태그'에 링크와 뉴스 제목 모두 담겨 있으므로
뉴스 목록을 보여주는 'a 태그' 만 가져오도록 하겠습니다.
위에서 requests로 얻어온 문서의 내용을 BeatifulSoup에서 파싱이 가능하도록 적용해 주신다음
BeatifulSoup 메소드인 find_all()을 통해 찾고자 하는 a 태그만 가져오도록 합니다.
> find_all('태그',{'요소' : '요소 값'})
코드를 실행하면
위에서 문서 전체를 보는 것 보다는 원하는 태그의 내용만 추려오는것을 볼 수 있습니다.
문서 전체 보다는 내용을 추리긴 했지만 그래도 복잡한 감이 없지 않습니다.
해당 태그에서 특정 속성 값만 가져오는 작업을 이어서 해보도록 하겠습니다.
위에서 a 태그 자체를 출력했던 것을 a.get('요소') 으로 바꾸어 원하는 데이터만 출력 해보도록 하겠습니다.
사진에서 볼수 있다시피
최종 목표인 뉴스의 제목과 링크를 가져올 수 있었습니다.
실제 검색에서도 크롤링한 목록과 같은 결과인것을 보실 수 있습니다.
참고 포스팅
* python scraping requests
https://stickode.com/detail.html?no=907
* print 함수들
https://stickode.com/detail.html?no=849
'Python' 카테고리의 다른 글
[Python][Pycharm] 이미지 모자이크 처리 (0) | 2021.09.13 |
---|---|
[Python] 소켓 통신하여 채팅 하기 (12) | 2021.09.11 |
[Python] matplotlib 을 사용하여 원형 차트 그리기 (0) | 2021.09.02 |
[Python] Logging 모듈로 로그 남기기 (0) | 2021.08.26 |
[Python] OpenCV를 활용하여 얼굴 인식하기 (2) | 2021.08.14 |