일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C#
- AI
- TypeScript
- Clone
- loop
- 보안
- dotenv
- webpack
- docker
- condition
- bash
- generic
- scss
- 앙상블
- leetcode
- vue.js
- git
- Python
- machine learning
- security
- JavaScript
- vuetify
- npm
- type
- VUE
- var
- BOJ
- nginx
- property
- C++
- Today
- Total
ice rabbit programming
[Python] 파이썬으로 크롤링하기 본문
크롤링
크롤링은 웹 페이지에서 필요한 데이터를 추출하는 작업이다. 이 데이터들을 원하는 형태로 파싱하여 사용한다. 도식화하여 과정을 보면 다음과 같다.
웹에서 HTML 구조 파악 -> request로 HTML 가져오기 -> HTML 분석하여 필요한 데이터 가져오기 -> 개행 문자 등 필요 없는 부분 필터링(파싱) -> 실제 사용
가져온 HTML을 분석하는 도구에는 여러 가지가 있지만, 여기서는 가장 널리 쓰이는 BeautifulSoup을 사용한다.
BeautifulSoup은 HTML뿐 아니라 XML, JSON 등을 모두 분석할 수 있다. 아래와 같이 객체를 만들고 분석할 수 있다.
soup = BeautifulSoup(open("index.html"), "html.parser") # 객체 생성
soup.find("p") # 처음 등장하는 태그 찾기
soup.find_all("p") # 모든 태그 찾기
soup.find("div", class_="kdh") # 태그 및 클래스를 통해서 찾기
soup.find("div", id="kdh") # 태그 및 아이디를 통해서 찾기
soup.find("p").find("P") # find 결과도 객체이므로 재추출 가능
soup.find("p").get_text() # 태그가 가진 텍스트 추출
find를 계속해서 진행하거나, HTML 태그 내에 있는 클래스나 아이디 등을 통해 특정 태그를 가져올 수도 있다.
웹 페이지는 HTML로 표현되는데, 이를 얻기 위해 requests 라이브러리를 사용한다. requests 라이브러리는 python에서 HTTP 요청을 보내는 역할을 한다. HTTP 통신은 간략하게 request(요청)를 보내면 response(응답)이 오는 형식의 통신이다. 그 외에도 HTTP 통신에 대해 많은 내용이 있지만 여기서는 GET 방식 요청과 POST 방식 요청에 대해서만 간단히 보겠다.
GET : 정보를 조회하기 위해 주로 요청하는 방식으로, 크롬 등 브라우저로 접속하면 GET으로 요청을 보낸다. 파라미터가 다 드러나며 주로 DB 안의 데이터를 건드리지(삽입, 수정 등) 않는 경우에 사용한다.
POST : 정보를 생성, 변경하기 위해 주로 요청하는 방식으로, 로그인하거나 메일을 삭제하는 등의 동작을 할 때 주로 사용한다. REST API를 따르면 PUT과 DELETE를 사용하기도 하지만 그렇지 않을 경우에는 DB 안의 데이터를 건드리는 경우에 사용한다.
url = "https://www.google.com"
result = requests.get(url) # url에 GET request를 보냄, result에 response가 담김
soup = BeautifulSoup(result.text, "html.parser") # requests와 BeautifulSoup의 조합
실제로 웹을 크롤링을 할 경우에는 할 페이지로 들어가서 F12나 우클릭-검사를 선택해 개발자 도구를 켜 HTMl의 태그 구조를 파악한다. 그 후에 위에서 본 것처럼 태그를 통해 필요한 정보를 찾는 것이다. 아래는 현재 포스팅 중인 페이지에서 F12를 눌러 개발자 도구를 켠 것이다.
'Development > Python' 카테고리의 다른 글
[Python] pipenv 사용하기 (0) | 2021.01.14 |
---|---|
[Python] Python에서 Excel 파일 읽어오기 (0) | 2021.01.07 |
[Python] VS Code에서 Python lint 적용하기 (0) | 2021.01.02 |
[Python] Python 기초 팁 (0) | 2020.09.04 |
[Python] Python 기초 - 함수, 반복문 (0) | 2020.09.04 |