DevSSOM
파이썬 크롤링 - BeautifulSoup 기본 개념 본문
반응형
크롤링이란?
: 웹 페이지에서 필요한 데이터를 추출해내는 작업. 크롤링을 하는 프로그램은 크롤러라고 함.
BeautifulSoup 라이브러리
: HTML, XML, JSON 등 파일의 구문을 분석하는 모듈. 웹 페이지를 표현하는 HTML을 분석하기 위해 사용함.
1. BeautifulSoup 시작하기
HTML 파일로 BeautifulSoup 객체를 만들 수 있음. 변수 이름은 관습적으로 soup이라고 지음. "html.parser"의 의미는, BeautifulSoup 객체에게 "HTML을 분석해라"라고 알려주는 것. "html.parser"는 파이썬 내장 클래스. 별도로 써주지 않으면 BeautifulSoup 객체는 자동으로 "html.parser"가 작동됨.
soup = BeautifulSoup(open("index.html"), "html.parser")
# index.html이라는 html파일로 BeautifulSoup 객체를 만들어줌
cf. open() 함수는 파일에 대한 객체를 만드는 함수
open("data.txt")
2. 태그 추출하기
- find, find_all() : HTML 태그를 추출하는 메소드. find는 HTML 태그 한 개를 추출할 수 있고, find_all은 HTML 태그를 여러 개 담고 있는 리스트를 얻을 수 있음.
soup.find("p") # 처음 등장하는 p 태그 찾기
soup.find_all("p") # 모든 P 태그 찾기
print(soup.find("p"))
print(soup.find_all("p"))
""" 출력 결과
<p></p>
[<p></p>, <p></p>, ..., <p></p>] """
Q. div 태그 중, 클래스가 crong인 것만 추출하려면 어떻게 해야될까?
<!DOCTYPE html>
...
<body>
<div class = "pororo">
<p>Don't crawl this.</p>
</div>
<div class = "crong">
<p>Hello, Python Crawling!</p>
</div>
</body>
soup.find("div")
soup.find("div", class_="crong")
- class_ 매개변수 : class_ 매개변수에 값을 저장함으로써 특정 클래스를 가진 태그를 추출할 수 있음. class라는 단어가 파이썬에서 예약어로 사용되기 때문에, class 뒤에 꼭 언더바 _ 를 붙여줘야 함.
soup.find("div", class_="crong").find("p")
- find로 얻은 결과도 BeautifulSoup의 객체가 될 수 있음. 그래서 find를 한 결과에 또 find를 적용할 수 있는 것. 아래 코드는 div 태그의 crong 클래스 안에 있는 p 태그를 추출함.
- get_text() : BeautifulSoup 객체에 get_text 메소드를 적용하면 태그에서 딱 텍스트만 출력됨.
soup.find("div", class_="crong").find("p").get_text()
print(soup.find("p"))
print(soup.find("p").get_text())
""" 출력 결과
<p>Hello, Python Crawling!</p>
Hello, Python Crawling! """
- id 매개변수 : 특정 id의 값을 추출하고자 할 때는 id 매개변수의 값을 지정할 수 있음.
soup.find("div")
soup.find("div", id= "crong")
3. requests 라이브러리
: 파이썬에서 HTTP 요청을 보낼 수 있는 모듈.
* HTTP 요청이란? - GET 요청 : 정보를 조회하기 위한 요청 (ex. 네이버 홈페이지에 접속한다. 구글에 키워드를 검색한다) - POST 요청 : 정보를 생성, 변경하기 위한 요청 (ex. 웹 사이트에 로그인한다. 메일을 삭제한다) |
실제로 웹 크롤링을 하기 위해서는 외부에 존재하는 웹사이트의 HTML 파일을 얻어야 함. 그걸 얻기 위해서 requests 라이브러리를 사용하는 거야.
- get() : 지정한 URL로 GET 요청을 보내면, 서버가 요청을 받아 처리하게 되면 result 변수로 응답을 받음. url을 get메소드의 매개변수로 넣어.
url = "https://www.google.com"
result = requests.get(url)
- status_code : 응답의 status_code로는 요청의 결과를 알 수 있음. 만약 요청이 성공했다면 text로 해당 웹 사이트의 HTML을 얻을 수 있음.
print(result.status_code) # 200은 성공 응답코드, 404는오류 응답코드
print(result.text) # .text로 하면 html문서를 출력
- 두 라이브러리의 조합 : requests와 BeautifulSoup을 조합해서 웹 페이지의 HTML을 분석할 수 있음.
soup = BeautifulSoup(result.text, "html.parser")
requests로 웹 페이지 HTML 문서 불러오기
requests 라이브러리를 이용하여 네이버의 HTML 문서를 불러와 출력하려면?
import requests
from bs4 import BeautifulSoup
url = "https://www.naver.com"
# url 변수에 담긴 url의 html 문서를 불러와 출력
req = requests.get(url)
print(req.text)
728x90
반응형
'Python > 크롤링' 카테고리의 다른 글
파이썬 크롤링 - HTML 태그 속성 (0) | 2021.06.27 |
---|---|
파이썬 크롤링 - 쿼리 개념 (0) | 2021.06.26 |
파이썬 크롤링 - 간단한 실습 : 네이트 판 댓글 수집 (1) | 2021.06.25 |
파이썬 크롤링 - 간단한 실습 : 영화 리뷰 수집 (0) | 2021.06.24 |
파이썬 크롤링 - 간단한 실습 : 벅스뮤직 음원차트 추출 (0) | 2021.06.23 |
파이썬 크롤링 - 간단한 실습 : 네이버 뉴스 헤드라인 추출 (0) | 2021.06.22 |
파이썬 크롤링 - 간단한 실습 : 네이버 헤드 뉴스 찾기 (0) | 2021.06.21 |
댓글