인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
크롤링 기법(Python)
예제를 통한 크롤링 기법 연습
여러 페이지를 한 번에 크롤링하는 기법
import requests
from bs4 import BeautifulSoup
for page_num in range(10):
if page_num == 0:
res = requests.get('https://davelee-fun.github.io/')
else:
res = requests.get('https://davelee-fun.github.io/page' + str(page_num + 1))
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('h4.card-text')
for item in data:
print (item.get_text().strip())
```
결과 :
상품명: 보몽드 순면스퀘어 솔리드 누빔매트커버, 다크블루
상품명: 슈에뜨룸 선인장 리플 침구 세트, 베이지
상품명: 선우랜드 레인보우 2단 문걸이용 옷걸이 _중형, 화이트, 상세페이지참조
상품명: 보드래 헬로우 누빔 매트리스커버, 핑크
상품명: 보드래 퍼펙트 누빔 매트리스커버, 차콜
상품명: 피아블 클래식 방수 매트리스커버, 화이트
상품명: 더자리 에코항균 마이크로 매트리스커버, 밀키차콜그레이
상품명: 더자리 프레쉬 퓨어 매트리스 커버, 퓨어 차콜그레이
상품명: 몽쉐어 알러스킨 항균 매트리스 커버, 카키그레이
상품명: 쿠팡 브랜드 - 코멧 홈 40수 트윌 순면 100% 홑겹 매트리스커버, 그레이
상품명: 패브릭아트 항균 마이크로 원단 매트리스 커버, 아이보리
상품명: 바숨 순면 누빔 침대 매트리스커버, 차콜
상품명: WEMAX 다용도 문옷걸이, 화이트, 1개
상품명: 타카타카 프리미엄 나노 화이바 누빔 매트리스 커버, 젠틀핑핑
상품명: 보몽드 순면스퀘어 누빔매트커버, 다크그레이
상품명: 보드래 국내산 순면 60수 누빔 매트리스커버, 그레이
상품명: 보드래 퍼펙트 누빔 매트리스커버, 베이지핑크
상품명: 쿠팡 브랜드 - 코멧 홈 40수 순면 누빔 매트리스커버, 챠콜
상품명: 바숨 순면 누빔 침대 매트리스커버, 화이트
상품명: 프랑떼 항균 방수 매트리스커버, 화이트
상품명: 보몽드 순면스퀘어 솔리드 누빔매트커버, 다크블루
상품명: 네이쳐리빙 피아블 클래식 방수 매트리스커버, 그레이
상품명: 쿠팡 브랜드 - 코멧 홈 순면 매트리스커버, 베이지
상품명: 타카타카 프리미엄 나노 화이바 누빔 매트리스 커버, 프렌치불독
상품명: 더자리 에코항균 마이크로 매트리스커버, 밀키그레이
상품명: 보몽드 순면스퀘어 누빔매트커버, 화이트
상품명: 피아블 클래식 방수 매트리스커버, 화이트
상품명: 쿠팡 브랜드 - 코멧 홈 순면 매트리스커버, 차콜그레이
상품명: 쉬즈홈 모던그리드 순면 여름이불 베개커버 패드세트, 핑크
상품명: 스코홈 빅리플 여름 차렵이불패드 3종 세트, 마린그레이
상품명: 아망떼 시어서커 리플 홑이불 패드세트, 웨이크
상품명: 마이센스 무더운 여름엔 시어서커 여름이불 패드 베개 이불세트 30종, 시어서커_파스텔그레이
상품명: 믹스앤매치 로라 프릴 시어서커 침구세트, 그레이
상품명: 에피소드1 샤베트 프릴 시어서커 여름이불패드세트, 그레이
상품명: 슈에뜨룸 선인장 리플 침구 세트, 베이지
상품명: 아망떼 시어서커 리플 홑이불 패드세트, 허브티
상품명: 지베딩 아이스베어 시어서커 여름침구 풀세트, 민트그레이
상품명: 쁘리엘르 테스 시어서커 여름이불 패드세트, 그레이
상품명: 쉬즈홈 시어서커 홑이불 + 토퍼 + 베개커버 세트, 나나 옐로우
상품명: 아망떼 시어서커 리플 퀼팅 이불패드세트, 리엔나
상품명: 바자르 트로피컬 인견 여름 이불세트 인견이불 + 베개커버 2p + 인견패드, 그린
상품명: 바자르 라이닝 혼방 인견 여름 이불베개세트 + 패드 Q, 쿨 네이비
상품명: 슈에뜨룸 비숑 피치스킨 침구세트, 그레이
상품명: 스코홈 시어서커 여름 이불 패드 3종 세트, 차콜
상품명: 스코홈 어번시리즈 순면 차렵이불 누빔 매트커버세트 S 차콜
상품명: 쉬즈홈 루즈 시어서커 차렵이불 패드세트, 그레이
상품명: 예가로드 메리엘 시어서커 누비이불 패드세트, 블루
상품명: 에피소드1 샤베트 프릴 시어서커 여름이불패드세트, 화이트
상품명: 쉬즈홈 플루 시어서커 차렵이불 패드세트, 그린
상품명: 메종 레이스 차렵 이불 세트, 블루
상품명: 믹스앤매치 로라 프릴 시어서커 침구세트, 그린
상품명: 슈에뜨룸 발그레 피치 리플 침구 세트, 혼합 색상
상품명: 보몽드 메종 레이스 차렵이불 3종 세트, 민트
상품명: 슈에뜨룸 체크 피치스킨 침구세트, 모카
상품명: 메리엘 시어서커 에어리플 이불세트, 그레이
상품명: 슈에뜨룸 빠삐용 시어서커 침구세트, 네이비
상품명: 믹스앤매치 에이프릴 리플 누비이불 패드세트, 화이트
상품명: 쉬즈홈 시어서커 홑이불 토퍼세트, 루즈 그레이
상품명: 이코디 5단 엔틱 도어 행거, 브라운, 1개
상품명: 선우랜드 우드볼 도어훅 4구, 실버, 1개
상품명: 리은상점 다용도 도어훅 문걸이 행거 모자걸이 머플러 목도리 걸이, 화이트, 5개
상품명: 퍼니스코 다용도걸이 모자걸이 가방걸이 도어훅 도어행거 문걸이, 엔틱브라운, 1세트
상품명: 스텐 도어후크 옷걸이/도어훅 문옷걸이 행거 바지걸이, 혼합 색상, 1개
상품명: 디비플러스 키펙스 컬러 폭조절 오버 도어훅, 블랙, 1개
상품명: 리빙스토리 1+1 문에 거는 문 옷걸이 음자리 도어후크 방문 행거, 음자리도어후크-로즈골드, 2개
상품명: 나이스후크 도어행거 2개 세트 (문행거), 블랙+화이트
상품명: 리빙파이 도어훅 옷걸이 행거 7구, 블랙, 1개
상품명: 선우랜드 우드볼 도어훅 10구, 실버, 1개
상품명: 웰렉스 도어행거 MH1060 신형 본사직발송 미니건조대 도어옷걸이 도어훅, 고동색, 1개
상품명: 엔비 엔틱 7구 도어훅 옷걸이, 도어훅 1+1, 1+1
상품명: 코시나 무타공 문걸이 후크선반 1단, 화이트, 1개
상품명: 코시나 무타공 올스텐 문걸이행거, 혼합 색상, 1개
상품명: [아트박스 POOM/이케아] ENUDDEN 도어 행거, 본품, 수량
상품명: 비스비바 우드 폴 다용도걸이 3구, 혼합 색상, 1개
상품명: 숲속애 웨이브 도어후크 5구, 블랙, 1개
상품명: 펀타스틱 다용도 문틀걸이, 화이트, 1개
상품명: 선우랜드 우드볼 도어훅 4구, 화이트, 1개
상품명: 네이쳐리빙 어반모카 와이어 도어훅 옷걸이 6구, 단일 색상, 1개
상품명: 까사마루 블랑 접이식 문걸이 건조대, 1개
상품명: 선우랜드 우드볼 도어훅 6구, 실버, 1개
상품명: 이케아 ENUDDEN 문걸이 행거 402.516.66, 화이트, 1개
상품명: 선우랜드 우드볼 도어훅 10구, 화이트, 1개
상품명: 코멧 홈 우드볼 도어행거, 6구, 혼합색상
상품명: 선우랜드 레인보우 2단 문걸이용 옷걸이 _중형, 화이트, 상세페이지참조
상품명: 코시나 무타공 문걸이 후크선반 2단, 화이트, 1개
상품명: 스파이더락 도어후크 8구, 화이트, 1개
상품명: 선우랜드 우드볼 도어훅 6구, 화이트, 1개
상품명: 코멧 홈 우드볼 도어행거, 10구, 혼합색상
상품명: 보드래 헬로우 누빔 매트리스커버, 핑크
상품명: 보몽드 순면스퀘어 솔리드 누빔매트커버, 아이보리
상품명: 더자리 에코항균 마이크로 매트리스커버, 밀키핑크
상품명: 타카타카 프리미엄 나노 화이바 누빔 매트리스 커버, 미스밍고
상품명: 네이쳐리빙 피아블 클래식 방수 매트리스커버, 그레이
상품명: 프로텍트어베드 베이직 매트리스 방수커버, 그레이
```
예제를 위해 만든 웹 사이트에서 1~10 페이지의 데이터를 추출한 것이다.
해당 웹 사이트에서 첫 페이지는 페이지 번호가 없기 때문에, if문을 통해 page_num이 0일 때 첫 페이지를
가져오도록 한 것이다.
import requests
from bs4 import BeautifulSoup
for index in range(1, 10):
res = requests.get('https://davelee-fun.github.io/page' + str(index) + '/')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div.card-body > h4')
for item in items:
print(item.get_text().strip())
예제를 위해 만든 웹 사이트에서 1~9 페이지의 데이터를 추출한 것이다. (페이지 번호 활용)
크롤링할 페이지가 존재하지 않는 경우 확인하는 기법(응답 코드 활용)
import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/xxx')
if res.status_code != 200:
print('페이지 없음')
else:
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('h4.card-text')
for item in data:
print(item.get_text())
```
결과 :
페이지 없음 (https://davelee-fun.github.io/xxx 는 존재하지 않는 웹 사이트)
```
requests 라이브러리로 웹 사이트를 불러오는 경우, 응답코드는 res.status_code에 들어있다.
res.status_code에 들어있는 응답코드가 200이 아니면, 해당 웹 사이트를 불러오는데 실패한 것이다.
[엄밀히 말하면, 불러오고자 하는 페이지가 존재하지 않는 경우 응답 코드는 404 이다. (페이지 없음 코드)]
위의 예시코드처럼, if문을 활용하여 존재하지 않는 웹 페이지를 크롤링하고자 시도할 경우 페이지 없음을 알려주는
응답 코드를 활용하여 크롤링 성공 여부와 웹 페이지 응답 상태를 확인할 수 있다.
참고
- HTTP response code
HTTP 라는 프로토콜 규격에 따라서, 응답 데이터 안에 응답 코드를 넣어서 보낸다.
requests 라이브러리를 사용할 경우, requests.get() 함수의 리턴 변수(위의 예시에서 변수 res)에 응답 데이터가
포함되며 리턴변수명.status_code 에서 응답 코드를 확인할 수 있다. (ex. res.status_code)
한편, HTTP 규격에 따라 응답 코드가 200인 경우는 정상 응답이고 그렇지 않으면 비정상 응답이라는 의미이다.(문제 발생)
- 참고 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
'Python' 카테고리의 다른 글
Python - 크롤링을 위한 지식(Open API, JSON) (0) | 2021.11.01 |
---|---|
Python - 엑셀파일과 크롤링 (0) | 2021.11.01 |
Python - 크롤링 라이브러리 비교(requests vs urllib) (0) | 2021.10.31 |
Python - 크롤링 실전 연습(1) (0) | 2021.10.31 |
Python - CSS selector를 활용한 크롤링 (0) | 2021.10.29 |
댓글