쫑가 과정

2주차_쇼핑페이지 크롤링하기(X) 본문

프로그래밍 공부/파이선_정보취합하기

2주차_쇼핑페이지 크롤링하기(X)

쫑가 2021. 5. 4. 17:47

주의사항 : 초심자가 진행한 기록물입니다. 당연히 전문적 지식은 없고 교육 중 또는 검색을 통해 따라 했을 뿐입니다. 하지만 그 따라 하는 과정도 쉽지 않았기에 남깁니다.

 

0. 알고 가자! 크롤링??

처음부터 크롤링이라고 하길래 정보 모으는 게 크롤링이거니 생각했다. 그러다 재밌는 글을 발견!

velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I

 

🖨 '웹 크롤러' 좀 그만 만들어라

아무튼 그만 만들어라.

velog.io

글에 빨려 들어갈 듯이 잘 쓰셨다. 읽고 나니 제대로 구분부터 해야겠다고 생각이 들었다.

 

98yejin.github.io/2020-11-02-crawling-vs-scraping/

 

웹 크롤링과 웹 스크래핑의 차이점

crawling, scraping

98yejin.github.io

위 글을 요약하자면

크롤링은 끝없이 탐색하면서 스스로 웹 페이지를 탐색할 수 있는 프로그램의 능력을 의미. (예. 일반적으로 Google, Yahoo, Bing 등)

웹 스크래핑은 특정 웹 페이지에서 특정 정보를 검색해 분석을 위한 특정 데이터를 추출하거나 새로운 것. (예. 주식 시장 데이터, 비즈니스 리드, 공급업체 제품 스크래핑과 같은 특정 데이터에 대한 특정 웹 사이트)

 

결국 내가 한건 웹 스크래핑이다~ 이 말씀.

 

1. 당근마켓 웹 스크래핑 분석하기

기본적인 공부도 안되어있는 나에게는 그냥 따라 하기일 뿐..

강사님이 작성했다. 작동 잘 되더라~ 뭐라고 한 건지 분석을 해보자

 

import requests -> requests를 들여온다.

from bs4 import Beatifulsoup -> bs4에서 Beautifulsoup을 들여온다. 

 

위 코드를 작동하게 하기 위해 하나씩 알아보자

 

웹 스크래핑을 하기 위해 필요한 모듈.

RequestsHTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리입니다.

(본문에 따르면 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

 

ImportError: No module named requests

Whenever I try to import requests, I get an error saying No module Named requests. import requests The error I get: File "ex2.py", line 1, in import requests ImportError: No m...

stackoverflow.com

 

여러 가지를 다 봤지만 여기가 제일 도움이 되었다고 생각한다.

이것저것 다 했지만 여전히 문제는 해결되지 않았는데

너무도 쉽게 해결됐다.

그냥 가상 환경에 들어가서 설치하면 되는 거였다..

설치되어있는지 확인하는 코드만 알았어도 금방 해결했다!! 분노가 차오른다!!

다음

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

 

Quickstart — Requests 2.25.1 documentation

Eager to get started? This page gives a good introduction in how to get started with Requests. Let’s get started with some simple examples. Passing Parameters In URLs You often want to send some sort of data in the URL’s query string. If you were const

docs.python-requests.org

get이란?

hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/

 

GET과 POST의 차이

HTTP HTTP는 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜입니다. 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을

hongsii.github.io

get이란 게 무엇이다 정의할만한 실력이 아니라 못하겠다. 

정의하기 힘든 건 링크만 남기도록 하겠다. 알아서 보도록!

 

#rest API는 뭐냐?

-> # 은 코드로 인식되지 않게 한다. 주석으로 사용.

gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

soup = BeautifulSoup(webpage.content, "html.parser")

-> soup이란 변수를 지정.

-> BeautifulSoup 'html.parser'방식으로 webpage의 문자열(. content or. text)을 받는다.

 

BeautifulSoup 사용법

www.crummy.com/software/BeautifulSoup/bs4/doc/

 

Beautiful Soup Documentation — Beautiful Soup 4.9.0 documentation

Non-pretty printing If you just want a string, with no fancy formatting, you can call str() on a BeautifulSoup object (unicode() in Python 2), or on a Tag within it: str(soup) # ' I linked to example.com ' str(soup.a) # ' I linked to example.com ' The str(

www.crummy.com

beautifulSoup Parser 장단점 표

Parser란?

찾아보니 뭔 말인지 참 어렵더라!

blog.binple.net/98

 

파싱(Parsing)과 파서(Parser)

파싱이란 어떤 데이터를 원하는 모양으로 만들어 내는걸 말한다. 1. 파싱 :   1)  특정문서(XML 따위)를 읽어 들여서 이를 다른 프로그램이나 서브루틴이 사용할 수 있는 내부 의 표현 방식으로 변

blog.binple.net

 

#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를 사용하는 게 정신건강에 좋다고 한다.

desarraigado.tistory.com/14

 

BeautifulSoup 모듈 find와 select의 차이점 - 복잡한 웹을 간단하게

BeautifulSoup은 HTML 문서를 예쁘게 정돈된 파스트리로 변환하여 내놓는 파이썬 라이브러리다. 이 잘 정돈된 데이터 구조는 Beautiful Soup 객체로서 여러 tag 객체로 이루어져 있다. 영어, 한국어와 같은

desarraigado.tistory.com

 

-> ("#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번째를 나오게 한다.

gostart.tistory.com/58

 

[Python] Python 에서 (), [], {} 의 용도

Python 에서 [], (), {} 용도  배열[Array]  튜플(Tuple)  딕셔너리{Dictionary}  선언  arr = []  tup = ()  dic = {}  초기화  arr = [1, 2, 3, 4]  tup = (1, 2, 3, 4)  dic = {"january":1, "Febru..

gostart.tistory.com

 

다음

 

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

 

4. More Control Flow Tools — Python 3.9.5 documentation

 

docs.python.org

wikidocs.net/22

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

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

 

[Python] 문자열 관련 함수 2 (lstrip, rstrip, strip, replace, split)

lstrip, rstrip, strip 함수는, 순서대로 왼쪽, 오른쪽, 양쪽 문자열 끝의 공백을 지워줍니다.문자열에는 ...

blog.naver.com

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

 

Python: 문자열 | end, 이스케이프 코드

print('', end='') 출력의 끝을 지정할 수 있다. 이스케이프코드 Escape code 특정한 기능을 수행하는 문자의 조합이다. 문자열 안에 코드를 넣으면 특정한 행동을 하게 된다. \n \t이 있다. \n enter 기

velog.io

 

print( item.select('a > div.card-desc > h2 ')[0].text.strip(), end=",")

->원하는 코드찾기

 

여기서 왼쪽 상단에 이 아이콘을 클릭하고 웹페이지에 마우스를 올리면 그 부분 코드를 찾아준다.

 

 

 

내가 가져가고 싶은 글 제목 위에 마우스를 가져가면, 사진처럼 코드를 찾아준다.

 

원하는 정보를 찾아서 계속 써주면 끝! 수고!

 

도움을 받은 곳은 더보기에!

모두 감사합니다!

더보기

okky.kr/article/370469

 

OKKY | 상위 태그의 하위 태그 값을 받는 방법?

div a href #this id someFile name ${row.file_id} ${row.orifile } /a nbsp; nbsp; nbsp; nbsp; nbsp; a href #this id delete_file name delete_file 삭제 /a /div function fn

okky.kr

hleecaster.com/python-web-crawling-with-beautifulsoup/

 

파이썬 웹 크롤링 기초 (BeautifulSoup 사용 방법) - 아무튼 워라밸

본 포스팅에서는 파이썬으로 누구나(?) 따라할 수 있는 웹 크롤링 방법을 소개한다.

hleecaster.com

 

velog.io/@swhybein/python-BeautifulSoup%EC%9C%BC%EB%A1%9C-%ED%81%AC%EB%A1%A4%EB%A7%81%ED%95%98%EA%B8%B0

 

Python - BeautifulSoup으로 크롤링하기

미국 영화 사이트 RottenTomatoes의 기생충 평론가 리뷰를 크롤링 해보겠습니다. 크롤링을 하기 위해서는 Request와 BeautifulSoup 라이브러리가 필요합니다. 크롤링용 가상환경을 세팅하고 필요한 라이

velog.io

 

stackoverflow.com/questions/19602398/python-beautiful-soup-content-property

 

Python Beautiful Soup .content Property

What does BeautifulSoup's .content do? I am working through crummy.com's tutorial and I don't really understand what .content does. I have looked at the forums and I have not seen any answers. Loo...

stackoverflow.com

brownbears.tistory.com/414

 

[Python] BeautifulSoup 사용하기

웹 크롤러를 만들거나 html에서 필요한 정보를 검색할 때, BeautifulSoup 라이브러리를 사용하여 편리하게 코딩할 수 있습니다. 설치 $ pip3 install beautifulsoup4 beautifulsoup에는 기본적으로 파이썬 표준라.

brownbears.tistory.com

gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

mans-daily.tistory.com/entry/Python%EC%9C%BC%EB%A1%9C-%EC%9B%B9-%EC%8A%A4%ED%81%AC%EB%9E%98%ED%8D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EB%B3%B5%EC%8A%B5-1%EC%9D%BC%EC%B0%A8-Feat-%EB%85%B8%EB%A7%88%EB%93%9C%EC%BD%94%EB%8D%94?category=829697

 

Python으로 웹 스크래퍼 만들기 복습 1일차[변수, 리스트, 튜플, 딕셔너리] (Feat. 노마드코더)

본 포스팅은 노마드코더님의 온라인 강의에 대한 복습을 기록하기 위한 포스팅입니다. 강의 소개 : 파이썬으로 웹 스크래퍼 만들기 (2주 완성반) -. 내용 : 파이썬 기초 (타입, 변수, 함수, 클래스

mans-daily.tistory.com

i-tinnovation.tistory.com/37

 

Python BeautifulSoup Install

안녕하세요 오늘은 파이썬을 이용한 웹크롤링에 많이 사용되는 라이브러리중 하나인 BeautifulSoup에 대해 알아보겠습니다. 먼저 BeautifulSoup이 설치되었는지 확인해야합니다. (파이썬 설치 단계 및

i-tinnovation.tistory.com

devraphy.tistory.com/category/Back-end/Basic%20python%20%26%20Crawler?page=2

 

'Back-end/Basic python & Crawler' 카테고리의 글 목록 (2 Page)

높이보다 멀리 가고싶은 개발자의 블로그

devraphy.tistory.com

 

Comments