먼저, 해당 글은 크롤링을 어떻게 하는지 알려주는 글이 아님을 알려드립니다!!
각 종 모듈 혹은 메서드에 대한 세부적인 설명을 드릴 수 있는 수준이 되지 않기 때문에 설명이 부족할 수 있습니다.!!
#인스타그램 크롤링 하기!
실전에 부딫히면서 배워나가는 것을 좋아하기 때문에 바로 공모전에 도전하게 되었습니다
여러분 또한 그런 마음으로 이 곳에 들어왔을 꺼라 믿습니다
크롤링에 사용되었던 가장 중요한 모듈은 두 가지 였습니다. 바로 BeautifulSoup와 Selenium 입니다
오늘은 그 중에서 BeautifulSoup에 대해서 포스팅 해보고자 합니다.
- BeautifulSoup 설치
가장 먼저 해야 할 것은 BeautifulSoup을 설치하는 것입니다.
Python 내장 함수가 아닌 이상, 명령프롬프트(cmd)를 활용하여 Python 내부에 설치해 주어야 합니다
pip install beautifulsoup4
이라는 코드를 명령프롬프트에 입력하면 다운로드 받을 수 있습니다.
여기서 pip은 beautifulsoup4 와 같은 패키지를 install, uninstall 할 수 있는 명령어 입니다.
(참고로 pip3 는 Python3 버전, pip은 python 2버전 입니다. 버전에 맞게 설치하셔야 합니다!!)
- Python 내부 import
1번에서 진행했던 일은 Python에서 모듈을 이용할 수 있도록 설치한 것입니다.
이제 Python 내부에서 사용하려면 import를 해야합니다.
from bs4 import BeautifulSoup
매우 간단하죠..? 사실 여기까지는 거의 다들 아시는 내용일 것이라 생각됩니다.
- BeautifulSoup와 requests를 활용하여 데이터 얻기
import requests
requests 는 html을 가져오는 도구입니다.
urllib도 있지만 requests가 간단하고 기능이 유용하기 때문에 선호됩니다(개인적으로만..)
사용했던 코딩으로 간단한 예를 들어보겠습니다
네이버의 뉴스 > 경제 부분을 예로 들겠습니다.
어떤 방식으로 크롤링을 하게될지는 모르지만 만약, 한 페이지의 내용을 가져오고
다음 페이지로 넘어가야한다면 높은 확률로 위 방법을 쓰게 될 것입니다.
방법은 다음과 같습니다
1. 찾고자하는 정보가 있는 페이지로 이동
2. 페이지가 바뀔 때, url이 어떤 식으로 바뀌는 지 찾아냄.
3. 알아낸 정보를 토대로 페이지를 자동으로 받아올 수 있는 문장을 구성
위 순서를 토대로 네이버 뉴스 > 경제 부문을 직접 보여 드리겠습니다 네이버 뉴스>경제에 들어갔을 때, url 창에 나와있던 값은
https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=101
이 것입니다. 그러나 하단에 있는 2 페이지를 클릭했을 때의 값은
https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=101#&date=%2000:00:00&page=2
위와 사뭇 다른 것을 볼 수 있었습니다. 다시 1페이지를 눌러보니
https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=101#&date=%2000:00:00&page=1
이런 값이 나오는 것을 확인 할 수 있었습니다.
해당 값에서는 어떤식으로 url이 구성되는 지 분명히 알 수 있었습니다.
아마 들어가는 경로가 달랐기 때문이라고 생각됩니다.
해당 부분을 알아 냈으니 저는 for문을 통해서 다음페이지 url을 계속 받아오게끔 코딩을 할 것입니다
https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=101#&date=%2000:00:00&page=1
맨 뒷부분의 "page=1" 에서 숫자부분이 페이지를 담당하고 있다는 것을 아까의 활동으로 알 수 있었습니다.
그 점을 참고하여 "page=1"에서의 "1" 을 {} 로 바꿉니다. format 함수를 이용할 것이기 때문입니다.
format함수는 문자열 내부에 변수를 넣을 수 있는 함수라고 생각하면 좋을 듯 합니다
문자열 내부에 for 문의 변수를 넣어 다음페이지를 계속 얻어 오는 것입니다
page라는 변수와 +1 모두 int이기 때문에 문자열인 url에 맞게 들어가기 위해 str을 사용하였습니다
그 결과로 나온 코드 값 입니다.
from bs4 import BeautifulSoup
import requests
for page in range(0,10):
url = "[https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=101#&date=%2000:00:00&page={}"
req = requests.get(url.format(str(page+1))
위 코드를 사용하면 네이버 경제부분의 1~10 페이지 소스를 가지고 올 수 있습니다.
본인이 원하는 데이터가 있는 페이지에서 위 처럼 코드를 구성하셨다면
다음은 해당 정보를 가지고 원하는 정보를 가져올 차례입니다.!!
다음 글에서 이어 작성하겠습니다
'Python > 크롤링' 카테고리의 다른 글
초보자의 크롤링 도전기!!(3) - Selenium (3) | 2019.04.06 |
---|---|
초보자의 크롤링 도전기!!(2) - BeautifulSoup (2) (0) | 2019.04.04 |