일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- javascript
- 픽셀
- PYTHON
- jQuery
- Unity
- 연습
- Event
- addEventListener
- 2D
- topdown
- Lerp
- Quaternion
- className
- 회전
- euler
- vsCode
- setItem
- 탑다운
- 종속변수
- classList
- 자주 사용하는 Quaternion 함수
- 독립변수
- 웹스크래핑
- getItem
- click
- wsl
- 도린이
- intervals
- 도트
- 코딩
- Today
- Total
쫑가 과정
2주차_쇼핑페이지 크롤링하기(X) 본문
주의사항 : 초심자가 진행한 기록물입니다. 당연히 전문적 지식은 없고 교육 중 또는 검색을 통해 따라 했을 뿐입니다. 하지만 그 따라 하는 과정도 쉽지 않았기에 남깁니다.
0. 알고 가자! 크롤링??
처음부터 크롤링이라고 하길래 정보 모으는 게 크롤링이거니 생각했다. 그러다 재밌는 글을 발견!
velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I
글에 빨려 들어갈 듯이 잘 쓰셨다. 읽고 나니 제대로 구분부터 해야겠다고 생각이 들었다.
98yejin.github.io/2020-11-02-crawling-vs-scraping/
위 글을 요약하자면
크롤링은 끝없이 탐색하면서 스스로 웹 페이지를 탐색할 수 있는 프로그램의 능력을 의미. (예. 일반적으로 Google, Yahoo, Bing 등)
웹 스크래핑은 특정 웹 페이지에서 특정 정보를 검색해 분석을 위한 특정 데이터를 추출하거나 새로운 것. (예. 주식 시장 데이터, 비즈니스 리드, 공급업체 제품 스크래핑과 같은 특정 데이터에 대한 특정 웹 사이트)
결국 내가 한건 웹 스크래핑이다~ 이 말씀.
1. 당근마켓 웹 스크래핑 분석하기
기본적인 공부도 안되어있는 나에게는 그냥 따라 하기일 뿐..
강사님이 작성했다. 작동 잘 되더라~ 뭐라고 한 건지 분석을 해보자
import requests -> requests를 들여온다.
from bs4 import Beatifulsoup -> bs4에서 Beautifulsoup을 들여온다.
위 코드를 작동하게 하기 위해 하나씩 알아보자
웹 스크래핑을 하기 위해 필요한 모듈.
Requests: HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리입니다.
(본문에 따르면 Requests is an elegant and simple HTTP library for Python, built for human beings.)
BeautifulSoup: 웹 페이지의 정보를 쉽게 스크랩할 수 있도록 기능을 제공하는 라이브러리입니다.
(본문에 따르면 BeautifulSoup is a Python library for pulling data out of HTML and XML files)
설치되어있는 pip 리스트를 열어본다.
(pip는 파이썬으로 작성된 패키지 소프트웨어를 설치 · 관리하는 패키지 관리 시스템이다)
pip list
설치가 되어있는 목록이 나오는데 여기서 bs4, beautifulsoup4, requests를 확인한다.
없다면 설치
(가상 환경으로 들어가서 하시오. 터미널에 치는 부분 가장 앞이 (foldername) 이런 식으로 되어있다면 오케이)
pip install requests
pip install beautifulsoup4
설치 코드를 입력하면 파바박 설치할 거다.
사실 이 부분이 잘 되지 않아서 고생을 좀 했다. 그 내용을 보려면 더보기!
나는 분명 requests와 bs4 설치를 했는데 계속 두 모듈이 없다고 오류가 났다.
그래서 또다시 폭풍 검색!
stackoverflow.com/questions/17309288/importerror-no-module-named-requests
여러 가지를 다 봤지만 여기가 제일 도움이 되었다고 생각한다.
이것저것 다 했지만 여전히 문제는 해결되지 않았는데
너무도 쉽게 해결됐다.
그냥 가상 환경에 들어가서 설치하면 되는 거였다..
설치되어있는지 확인하는 코드만 알았어도 금방 해결했다!! 분노가 차오른다!!
다음
webpage = requests.get("https://www.daangn.com/hot_articles")
-> webpage라는 변수를 지정.
변수란 데이터 값을 저장하기 위한 상자!
따로 변수를 선언하기 위한 명령어는 없고 처음 값을 부과하는 순간 생성된다.
(Variables are containers for storing data values.
Python has no command for declaring a variable.
A variable is created the moment you first assign a value to it.)
-> requests를 이용해 "https://www.daangn.com/hot_articles" 주소로 get 요청을 보내고 상태 코드와 HTML 내용을 응답받는다.
requests 사용법
docs.python-requests.org/en/master/user/quickstart/#make-a-request
get이란?
hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/
get이란 게 무엇이다 정의할만한 실력이 아니라 못하겠다.
정의하기 힘든 건 링크만 남기도록 하겠다. 알아서 보도록!
#rest API는 뭐냐?
-> # 은 코드로 인식되지 않게 한다. 주석으로 사용.
gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
soup = BeautifulSoup(webpage.content, "html.parser")
-> soup이란 변수를 지정.
-> BeautifulSoup 'html.parser'방식으로 webpage의 문자열(. content or. text)을 받는다.
BeautifulSoup 사용법
www.crummy.com/software/BeautifulSoup/bs4/doc/
Parser란?
찾아보니 뭔 말인지 참 어렵더라!
#print(soup)
-> soup이란 걸 나오게 한다 (print)
-> 중간에 제대로 작동하는지 확인하기 위한 작업
-> 제대로 나오는 것을 확인 후 # 주석처리.
# for child in soup.h1.children:
# print(child)
-> 태그는 보통 트리구조로 위계가 있어 만약 하위 태그를 모두 뽑아오고 싶다면. children을 사용
-> soup의 h1태그 안에 있는 하위 태그를 모두 가져온다.
-> 자세한 내용은 BeautifulSoup 사용법에서 Going down 항목 살펴보자 (당연히 상위 태그 가져오기도 있다, Going up항목)
다음
getItem = soup.select("#content > section.cards-wrap > article")
-> getItem이란 변수를 지정.
-> soup변수 (BeautifulSoup 'html.parser'방식으로 webpage의 문자열(. content or. text)을 받는다.)를 실행할 태그를 선택
가지고 올 태그를 선택해야 한다. 그때 사용하는 게 select!
select 사용법은 beautifulSoup 사용법에서 CSS selectors 항목
선택하는 방식은 select 말고 find도 있다
select를 사용하는 게 정신건강에 좋다고 한다.
-> ("#content > section.cards-wrap > article") 선택할 태그 찾기
다른 브라우저는 모르겠지만 크롬은 페이지에서 마우스 오른쪽 클릭 검사 혹은 F12를 눌러 웹페이지 코드를 볼 수 있다.
#content가 뭐야?
-> id가 content를 뜻한다. bs4사용법에 나와있다.
이제 해당 코드를 찾아보자.
코드 위에 마우스를 가져다 대보니 그 부분이 어느 범위를 말하는지 웹페이지에서 표시해준다.
아! "#content > section.cards-wrap > article" 은 게시글 하나의 정보가 다 들어있는 범위구나! 알았다.
아주 쉽게 해당 코드를 오른쪽 클릭해 Copy -> Copy selector를 클릭하면
"#content > section.cards-wrap > article:nth-child(1)"
#위 코드처럼 나오는데
#:nth-child()부분을 지우고 사용하면 된다.
"#content > section.cards-wrap > article"
print(getItem[0])
->getitem변수의 1번째를 나오게 한다.
다음
for item in getItem:
print( item.select('a > div.card-desc > h2 ')[0].text.strip(), end=",")
print( item.select('a > div.card-desc > div.card-price')[0].text.strip(),end=",")
print( item.select('a > div.card-desc > div.card-region-name')[0].text.strip(),end=",")
print( item.select('a > div.card-desc > div.card-counts')[0].text.strip().replace(' ', '').replace('\n', '').replace('∙', ','))
-> 1번 getItem을 item변수에 대입된 후 print(item.select...) 작업을 차례로 수행한다. 그다음 2번 getItem, 다음 3번 getItem... 리스트 마지막 요소까지 반복한다.
-> .text 문자열 / .strip() 전달된 문자를 String의 왼쪽과 오른쪽에서 제거 / end="," 끝부분에 , 추가
/ replace(' ','') ' '를 ''로 변경, \n(줄 바꿈)을 ''로 변경, '∙'을 ''로 변경
for반복문은 꼭 이해해야 한다!
docs.python.org/3/tutorial/controlflow.html#for-statements
strip() / end / replace
codechacha.com/ko/python-string-strip/m.blog.naver.com/PostView.nhn?blogId=leesoo9297&logNo=221138403871&proxyReferer=https:%2F%2Fwww.google.com%2F
velog.io/@ceres/Python-end-%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84-%EC%BD%94%EB%93%9C
print( item.select('a > div.card-desc > h2 ')[0].text.strip(), end=",")
->원하는 코드찾기
여기서 왼쪽 상단에 이 아이콘을 클릭하고 웹페이지에 마우스를 올리면 그 부분 코드를 찾아준다.
내가 가져가고 싶은 글 제목 위에 마우스를 가져가면, 사진처럼 코드를 찾아준다.
원하는 정보를 찾아서 계속 써주면 끝! 수고!
도움을 받은 곳은 더보기에!
모두 감사합니다!
'프로그래밍 공부 > 파이선_정보취합하기' 카테고리의 다른 글
마치고. (2) | 2021.05.28 |
---|---|
4주차 - wsl에서 selenium 인스타 정보 엑셀수집하기 (0) | 2021.05.28 |
3주차 - 쿠팡 정보를 엑셀로 만들기 (0) | 2021.05.20 |
7가지 연산자를 이용한 계산 실습 (0) | 2021.05.17 |
Python 기초 이론 박살내기! (0) | 2021.05.17 |
2주차 연습 - 쿠팡 웹스크래핑 (2) | 2021.05.13 |
1주차_윈도우 Visual Studio Code에 가상환경 설정! (0) | 2021.04.29 |
0. 코딩 (0) | 2021.04.22 |