웹 크롤링은 데이터를 수집하는 대표적인 방법이다. 데이터를 확보하는 것이 특정 단체에 속하거나 대회에 나가지 않는 이상 쉽지 않으므로 메타코드M '웹 크롤링 기초 강의'에서 그 방법을 익히고자 수강하게 되었다. 강의에서도 밝히듯이 엄밀히 말하면, 웹 스크래핑이라고 해야 하지만 통상적으로 웹 크롤링을 스크래핑처럼 쓰는 사람들이 많기에 웹 크롤링이라고 칭함을 일러둔다.
또 본 강의는 생초보자를 대상으로 하는 강의가 아니다. Python 환경 세팅 (VSCODE, Jupyter )이나 기초 실습을 강사의 다른 수업 (공공데이터 분석)에서 경험했다고 상정하고 진행한다. 필자는 Google Colab에서 실습할 예정이다.
Index
1강. 크롤링 입문 필수 이론
Requests
파이썬에서는 웹 서버와 통신하기 위한 라이브러리로 Requests를 사용한다. 클라이언트 (유저)가 데이터를 저장하고 있는 서버에 데이터를 요청하고 서버는 이에 따라 아래와 같은 반응을 한다.
- 200: OK. 이상없음. 데이터 제공.
- 404: Not Found. 해당 페이지 또는 리소를 찾을 수 없음.
- 400: Bad Request. 요청을 이해할 수 없거나 처리 불가.
이상없이 url의 정보를 가져왔고, 이 정보들은 구글 화면에서 F12를 눌러 개발자 모드로 들어가 확인할 수 있다.
HTML
HyperText Markup Language의 준말로, 웹 페이지의 구조를 정의하고 표시하는 마크업 언어라는 의미이다.
Beautifulsoup
웹 페이지의 HTML을 requests로 가져오면 그 다음 단계로, Beautifulsoup를 써서 HTML 문서를 파싱해야 한다. 파싱은, HTML 문서를 읽어 각 요소를 처리하기 쉬운 트리 형태의 구조로 변환하는 것을 뜻한다. 헤드, 속성, 내용 등을 활용해 접근하기 쉬워지므로 파싱을 진행한다.
아래 코드로 HTML을 파싱한다
soup = BeautifulSoup(html_doc, 'html.parser')
.text를 넣어 문자 부분만 가져올 수 있다. paragraph만 치면, 처음으로 오는 부분만 가져오기 때문에 문단의 모든 데이터를 가져오려면 find_all을 써야한다.
위의 이미지를 보면, find_all로 모든 paragraph의 데이터를 가져왔고 이 중에서 텍스트만 추출하기 위해 반복문을 돌렸다는 것을 알 수 있다. find_all은 리스트 형태로 저장되기 때문에 for문을 써서 데이터에 접근하였다.
Robots.txt
각 사이트별 크롤링을 허용하는 범위를 표시한 문서이다. 주소의 뒷부분에 '/robots.txt'를 넣어 확인할 수 있다.
*: 모든 유저
/$: 메인 페이지만 허용 (네이버)
아마존은 GPTBot이 자사의 모든 페이지에 대해 크롤링하는 것을 금하고 있다. 한편, 언론은 속보 등의 몇몇 기사를 제외하고는 대부분 크롤링을 허용하고 있는 것으로 보인다.
크롤링을 진행하기 전에 해당 사이트에서 크롤링을 허용하고 있는지 파악하여 문제가 생길 수 있는 소지를 미연에 방지하도록 하자.
다소 짧지만 메타코드M '웹 크롤링 기초 강의'의 첫번째 파트를 이것으로 마무리하고자 한다. 다음글이 길어질 듯하여 분량 조절을 하였다. 두번째 강의에서는 본격적으로 뉴스를 크롤링하는 프로젝트를 해볼 것이다.
'Python > Web Crawling' 카테고리의 다른 글
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #4 (fin) - 관광상품 리뷰 데이터 크롤링 및 분석 프로젝트 (0) | 2024.03.30 |
---|---|
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #3 - 기차표 티켓팅 프로젝트 (0) | 2024.03.29 |
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #2 - 뉴스 크롤링 자동화 프로젝트 (2) | 2024.03.27 |