본문 바로가기
Python

Python - 크롤링 실전 연습(1)

by DGK 2021. 10. 31.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

크롤링 연습(Python)

예제를 통해 크롤링 실전 연습을 하고자 한다.

 

쇼핑 사이트 크롤링 (예제 연습을 위해 만든 예제 사이트)

import requests
from bs4 import BeautifulSoup


res = requests.get('https://davelee-fun.github.io/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div.mainheading > h1')

for item in items:
    print(item.get_text())

 

```

결과 : 

 

Teddy의 선물 블로그

 

```

 

select('div. mainheading > h1') 코드는 div 태그 중 class 이름이 mainheading인 태그의 바로 밑에(하위에)

존재하는 h1 태그에서 데이터를 추출하겠다는 의미이다.

 

import requests
from bs4 import BeautifulSoup


res = requests.get('https://davelee-fun.github.io/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div.mainheading > p')

for item in items:
    print(item.get_text().strip())

 

```

결과 : 

 

선물하기 좋은 선물을 고르고 골라서 소개하는 블로그입니다.

 

```

 

앞선 예시와 동일한 원리로, div 태그 중 class 이름이 mainheading인 태그의 바로 밑에 존재하는 p 태그에서

데이터를 가져온 것이다.

 

import requests
from bs4 import BeautifulSoup


res = requests.get('https://davelee-fun.github.io/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div.card-body > h2 > a')

for item in items:
    print(item.get_text())

 

```

결과 : 

 

매트리스커버 관련 상품 추천

여름이불세트 관련 상품 추천

행거도어 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

행거도어 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

 

```

 

div 태그 중 class 이름이 card-body인 태그의 바로 밑에 존재하는 h2 태그, 그 바로 밑에 존재하는 a 태그에서

데이터를 추출한 것이다.

 

import requests
from bs4 import BeautifulSoup


res = requests.get('https://davelee-fun.github.io/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('h2.card-title > a.text-dark')

for item in items:
    print(item.get_text())

 

```

결과 : 

 

매트리스커버 관련 상품 추천

여름이불세트 관련 상품 추천

행거도어 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

행거도어 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

매트리스커버 관련 상품 추천

 

```

 

h2 태그 중 class 이름이 card-title인 태그 바로 밑에 존재하는, class 이름이 text-dark인 a 태그에서

데이터를 추출한 것이다.

특정 웹 페이지에서 CSS selector를 활용하여 동일한 데이터를 추출하는 방법은 다양하게 존재할 수 있다.

 

import requests
from bs4 import BeautifulSoup


res = requests.get('https://davelee-fun.github.io/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div.card-body > h4')

for item in items:
    print(item.get_text())

 

```

결과 :

 

상품명: 보몽드 순면스퀘어 솔리드 누빔매트커버, 다크블루

 

상품명: 슈에뜨룸 선인장 리플 침구 세트, 베이지

 

상품명: 선우랜드 레인보우 2단 문걸이용 옷걸이 _중형, 화이트, 상세페이지참조

 

상품명: 보드래 헬로우 누빔 매트리스커버, 핑크

 

상품명: 보드래 퍼펙트 누빔 매트리스커버, 차콜

 

상품명: 피아블 클래식 방수 매트리스커버, 화이트

 

상품명: 더자리 에코항균 마이크로 매트리스커버, 밀키차콜그레이

 

상품명: 더자리 프레쉬 퓨어 매트리스 커버, 퓨어 차콜그레이

 

상품명: 몽쉐어 알러스킨 항균 매트리스 커버, 카키그레이

 

상품명: 쿠팡 브랜드 - 코멧 홈 40수 트윌 순면 100% 홑겹 매트리스커버, 그레이

 

상품명: 패브릭아트 항균 마이크로 원단 매트리스 커버, 아이보리

 

상품명: 바숨 순면 누빔 침대 매트리스커버, 차콜

 

상품명: WEMAX 다용도 문옷걸이, 화이트, 1개

 

상품명: 타카타카 프리미엄 나노 화이바 누빔 매트리스 커버, 젠틀핑핑

 

상품명: 보몽드 순면스퀘어 누빔매트커버, 다크그레이

 

상품명: 보드래 국내산 순면 60수 누빔 매트리스커버, 그레이

 

```

 

div 태그 중 class 이름이 card-body인 태그 바로 밑에 존재하는 h4 태그에서 데이터를 추출한 것이다.

 

 

네이버 주식 사이트 크롤링

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.naver.com/sise/')
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('#popularItemList > li > a')

for item in data:
    print(item.get_text())

 

```

결과 :

 

삼성전자

카카오

셀트리온

SK하이닉스

위메이드

두산중공업

HMM

SK바이오사이언스

티비씨

셀트리온제약

 

```

 

네이버 주식 사이트에서 인기검색종목 데이터를 추출한 것이다.

 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.naver.com/sise/')
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('.lst_major > li')

for item in data:
    print(item.get_text().strip())

 

```

결과 :

 

다우산업35,730.48상승

나스닥15,448.12상승

홍콩H9,009.72하락

상해종합3,523.01상승

니케이22528,564.81하락

 

```

 

네이버 주식 사이트에서 주요 해외지수 데이터를 추출한 것이다.

 

 

참고(데이터 전처리)

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.naver.com/sise/')
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('.lst_major > li')

for item in data:
    print('지수이름: ',item.find('a').get_text().strip(), '현재지수 :', item.find('span').get_text(), item.find('em').get_text())

 

```

결과 :

 

지수이름: 다우산업 현재지수 : 35,730.48 상승

지수이름: 나스닥 현재지수 : 15,448.12 상승

지수이름: 홍콩H 현재지수 : 8,987.35 하락

지수이름: 상해종합 현재지수 : 3,519.91 상승

지수이름: 니케이225 현재지수 : 28,573.87 하락

 

```

 

바로 앞선 예시코드를 일부 정리, 가공(데이터 전처리)한 것이다.

중요한 점은 select() 함수로 추출한 데이터에서, 다시 한 번 find() 함수로 데이터를 (세부)추출할 수 있다는 것이다. 

 

댓글