2021.12.20 - [Study/Python] - [Python] 크롤링과 스크래핑 ( crawling, scraping ) #1 [ requests]
[Python] 크롤링과 스크래핑 ( crawling, scraping ) #1 [ requests]
크롤링이란 원하는 페이지의 정보를 긁어오는 것이고, 스크래핑은 그 긁어온 정보에서 필요한 데이터를 뽑아내는 것을 말합니다. ex) 영화 사이트를 크롤링하여 그 중 평점 데이터를 스크래핑
programmers-sosin.tistory.com
이전 게시글에서는 requests를 사용하여 크롤링하는 것을 배웠습니다.
이번 게시글에서는 bs4를 이용하여 크롤링한 정보에서 원하는 데이터를 스크래핑하는 것을 작성해보겠습니다.
Beautifulsoup4 사용법
beutifulsoup4는 줄여서 bs4 라고 하는데요. 이를 사용하여 크롤링한 정보에서 원하는 데이터를 쉽게 뽑아낼 수 있습니다.
import requests
from bs4 import BeautifulSoup
response = requests.get('https://search.naver.com/search.naver?query=파이썬')
search_page = response.text
soup = BeautifulSoup(search_page, 'html.parser')
print(soup.prettify())
print(soup.select('title'))
자 코드를 설명해보면 일단 bs4를 사용하기 위해 import 해준 후 requests를 통해 스크래핑 할 데이터가 있는 정보를 크롤링합니다.
이때 BeautifulSoup(search_page, 'html.parser')라는 것을 통해 search_page에 있는 html 코드를 html.parser를 통해 정리해주는 것입니다.
이때 무슨 정리?라고 할 수 있지만 HTML Parser란 HTML 문법 규칙을 바탕으로 웹페이지의 내용을 해석하고, 의미와 구조를 분석하는 프로그램입니다.
즉 기본적인 text로 가져온 html 코드를 문법과 태그에 맞춰서 정리해준 것입니다.
그리고 이를 통해 select를 사용해서 원하는 태그의 값을 가져올 수 있게 됩니다.
prettify는 출력물에 탭이나 공백 같은 것을 출력해주어 보기 편하게 만들어줍니다.
그러면 위 사진처럼 마지막 부분에 title 태그를 select로 가져와서 나오게 할 수 있습니다.
이때 select는 css의 선택자들을 사용하여 원하는 데이터가 있는 css의 선택자를 입력해서 가져올 수 있습니다.
네이버 검색 결과 제목 스크래핑 하기
그럼 이제 위에 적힌 내용을 기반으로 네이버에 파이썬을 웹 검색을 한 후, 나온 결과물들의 제목을 스크래핑해보겠습니다.
사용할 url :
파이썬 : 네이버 통합웹검색
'파이썬'의 네이버 통합웹검색 결과입니다.
search.naver.com
import requests
from bs4 import BeautifulSoup
response = requests.get('https://search.naver.com/search.naver?display=15&f=&filetype=0&page=11&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC&research_url=&sm=tab_pge&start=1&where=web')
search_page = response.text
soup = BeautifulSoup(search_page, 'html.parser')
titles = soup.select('div > div.total_tit_group > div.total_tit > a')
for title in titles:
print(title.get_text())
위처럼 성공적으로 데이터를 긁어올 수 있게 되었습니다 :)
'Study > Python' 카테고리의 다른 글
[Python] Kakao API를 이용하여 주소를 이용해 위도, 경도 알아내기 (0) | 2021.12.30 |
---|---|
[Python] Kakao API를 이용하여 주소를 이용해 위도, 경도 알아내기 (0) | 2021.12.30 |
[ Python ] pymongo에서 문자열 포함 여부를 확인하는 방법 (0) | 2021.12.27 |
[Python] 크롤링과 스크래핑 ( crawling, scraping ) #1 [ requests] (0) | 2021.12.20 |
[Python] Openpyxl과 네이버 Geocoding을 이용한 위도경도 변환하기 (0) | 2021.12.16 |