Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
Tags
- python #파이썬 #개발 #코딩 #초보 #예제 #문제 #풀이
- 문제
- 파이썬 #python #코딩 #for문 #for #이론
- 풀이
- 실습
- SQLD #SQL #에스큐엘디 #에스큐엘 #자격증 #2023년 #시험일정 #시험준비 #일정 #SQL개발자 #개발 #코딩 #분석
- 연산
- 파이썬 #python #for #예제 #문제 #풀이 #코딩 #공부
- 딕셔너리
- 파이썬
- 파이썬 #python #코딩 #문제 #풀이 #예제
- 파이썬 #python #코딩 #for #tuple #튜플 #예제 #문제 #풀이 #기초
- 기초
- 예제
- 파이썬 #python #코딩 #초보 #예제 #문제풀이
- python #파이썬 #분기문 #if #else #코딩 #초보 #개발 #예제 #문제 #풀이
- PYTHON
- 파이썬 #Python #코딩 #리스트 #문제 #list #풀이 #예제
- 파이썬 #python #for #예제 #문제 #풀이 #기초 #코딩
- 파이썬 #python #기초 #코딩 #예제 #문제 #풀이 #공부 #초보 #개발
- 코딩
- pythob
- 파이썬 #python #코딩 #개발 #초보 #예제 #문제 #풀이
- 파이썬 #리스트 #python #list #문제 #예제 #풀이
- python #파이썬 #코딩 #초보 #개발 #예제 #문제 #풀이 #리스트 #튜플
- 초보
- 정보처리기사 #개발자 #코딩 #자격증 #IT자격증 #프로그래밍 #초보 #공부 #시험 #일정 #2023년 #정처기 #시험정보
- list
- python #파이썬 #코딩 #예제 #풀이
- DICTIONARY
Archives
- Today
- Total
왕초보 코딩 개발 일지 블로그
[23.05.02] 웹크롤링 라이브러리 (Cadilla, 가구 구매 리뷰 크롤링) 본문
반응형
5_beautifulsoup_Practice_Extra_Cadilla
Library Import
import requests as req
from bs4 import BeautifulSoup as bs
import pandas as pd
url = 'https://www.cadillac.co.kr/crossovers-suvs/escalade'
res = req.get(url)
res
# 성공적으로 가져옴 (200번대 메세지)
<Response [200]>
# 상태메시지로는 무엇을 받아왔는지, 어떤 데이터가 있는지, 모른다.
res.text
BeatifulSoup 객체화
# select, select_one 등 beautifulsoup에서 제공하는 메소드와 함수를 사용하기 위해 필수!
bs_cadi = bs(res.text,'lxml')
bs_cadi
CSS Selector에는 어떤 것들이 있었지?
- tag selector ('tag 이름')
- id selector (#)
- class selector ('태그이름.클래스이름')
- child selector (>)
# CSS selector로 사용해서 차량명을 뽑아보자
SUV_names = bs_cadi.select('h4.q-headline.none-margin')
SUV_names[1].text
'\n\t\t\tSPORT PLATINUM\n\t\t'
# \n, \t => 이스케이프 문자 (Escape Chracter)
# \n - 새로운 줄 (개행)
# \t - 줄바꿈(tab)
# '\n\t\t\tSPORT PLATINUM\n\t\t'
# 해석을 해보자면 3개의 탭, 뒤에는 두개의 탭과 새로운 줄이 있음을 코드로 나타냄
# replace()함수를 사용, strip()함수를 사용할 겁니다.
for name in SUV_names:
SUV_names_strip = name.text.replace('\n','').replace('\t','').strip()
print(SUV_names_strip)
# replcae만 하면 끝인가? no no
# 공백을 제거한 것처럼 보이나, 실제로 공백이 완전히 제거되지 않았음
# 그래서, replace만 진행되면 개행문자가 빈 문자로 대체될 뿐,
# 아직 공백은 사라지게 되는 것이 아님.
# 그래서 for loop을 돌리는 김에 strip() 함수까지 써서 한큐에 보내야 함
PREMIUM LUXURY PLATINUM
SPORT PLATINUM
옵션 추출 (내풀이)
SUV_ops = bs_cadi.select('div.q-text.q-body1 > ul >li')
SUV_ops[0].text
'\xa0\xa0\xa0 38인치 커브드 OLED 디스플레이'
for ops in SUV_ops:
SUV_ops_strip = ops.text.replace('\xa0','').strip()
print(SUV_ops_strip)
윤호쌤 풀이
# div.none-margin > li
# div 요소 바로 아래의 li요소만 선택을 하게 됩니다.
# div.none-margin li
# div 요소 하위에 있는 모든 li 요소를 선택하게 됩니다.
features = bs_cadi.select('div.none-margin li')
for i in features :
print(i.text)
#features = bd.select('div.none-margin li')
# 옵션 '들'을 추출
# 1. 빈 리스트 (빈 그릇)
SUV_features = []
for feature in features:
# for loop를 사용 -> Features 리스트의 각 요소를 geature로 선언한 변수에 순차적으로 넣어주면서
SUV_features.append(feature.text.strip())
# 문자열을 추출하고, strip() 매소드를 사용해서, 공백을 제거한 후,
# SUV_features 리스트에 담아줘
DataFrame
- 차량명 : 'Sport Platinum'
- 옵션들
# 딕셔너리 형태로 저장해줌
# 왜?
# 딕셔너리 형식으로 저장하면, 데이터 구조가 보존된다.
# 대표적이 예로 beautifulsoup의 ResultSet 등 다양한 데이터 타입들이 섞여 있습니다.
# 그래서 딕셔너리 형태로 저장을 하면, 구조가 pandas 변환 때 일관성 유지
data = {'SUV_name' : SUV_names_strip, 'SUV_Features': SUV_features}
data
SUV_features_df = pd.DataFrame(data)
SUV_features_df
# CSV 파일로 내보내기
# 항상 파일로 내보내는 습관이 필요하다
# 나중에 다시 다 돌려서, 다시 뽑아야하는 불상사가 빈번
SUV_features_df.to_csv('C:/Users/user14/WebCrawling/car', encoding = 'euc-kr')
6_beautifulsoup_Practice_extra_OneRoom
Library Import
import requests as req
from bs4 import BeautifulSoup as bs
# 요청을 할 때 지연시간을 주기 위한 library
import time
Request/ Response를 받아와야겠죠
# consol -> navigator.userAgent
url = 'https://oneroommaking.com/product/detail.html?product_no=1911&cate_no=61&display_group=1'
head = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'}
res = req.get(url, headers = head)
res
res.text
BeautifulSoup 객체화 진행
soup = bs(res.text, 'lxml')
type(soup)
Select 함수로 review data를 추출해봅시다.
# 5개의 리뷰를 가져와야 한다.
# select_one이 아닌, select 로 진행
review = soup.select('div.review_list2_message_contain')
review
[]
# 경로를 잘 잡아주었는데, 빈 리스트로 반환이 되었다.
# 어떻게 해줘야 할까?
# 엇 iframe 태그가 있네?
# iframe이란?
# 기존 페이지 내에 새로운 페이지를 삽입하는 태그
iframe 이란
- iframe tag = 기존 페이지 내에 새로운 페이지를 삽입하는 태그
- 하나의 페이지 안에, 다른 페이지를 불러오는 것
- 일부 쇼핑몰 웹사이트에서는 리뷰나 상품정보를 iframe으로 구성하여 보여주는 경우가 많습니다.
# 원룸만들기 웹페이지에서 iframe으로 해당 페이지 서비스로 연결한 것
# 즉 하나의 페이지 안에, 다른 페이지를 불러온 것
# 요청이 원룸페이지가 아닌, 해당 리뷰 서비스를 제공하는 crema 페이지로 요청해야 함
url_iframe = 'https://review7.cre.ma/oneroommaking.com/products/reviews?product_code=1911&iframe_id=crema-product-reviews-2&widget_style=&app=0&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&nonmember_token=&secure_device_token=V2fc98f6259c654f126d62766e4ecf3f776c5f2b2aabadcc811e8b6e4ab1e67c01b3553921dea8a20d687711b910f76fc6&iframe=1'
head = {'user_agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'}
res_oneroom = req.get(url_iframe, headers = head)
res_oneroom.text
다시 BeautifulSoup 객체화 진행
soup_review = bs(res_oneroom.text,'lxml')
soup_review
review_data = soup_review.select('div.review_list_v2__message.js-collapsed-review-content.js-translate-text')
review_data[2].text
'\n 손가락을 잃고 책장을 얻었다…. 뿌듯 근데 제품이 조금 까져서 왔더라구요… 괜춘괜춘합니다 ㅠㅡㅠ 하나 더 부를 거 같은데 이번에만 안까져서 오길 ㅎ ㅡㅎ\n
for loop를 사용해서
- 데이터를 추출
- 텍스트만 동시 추출 및 공백을 동시 제거
# replace()함수를 사용, strip()함수를 사용할 겁니다.
cnt=1
# cnt는 1로 초기화를 해주는데, 1부터 카운트가 되도록 셋팅
# review_data의 길이만큼 범위를 두고 순차적으로 돌겠습니다.
for i in range(len(review_data)):
# 리뷰 보기가 불편하니, 숫자로 출력을 구분지어 주겠습니다.
# formatting을 사용해보도록 할게요.
print(f'[{cnt}]')
# 아까 데이터를 보니 불필요한 공백이 너무 많았다.
# 텍스트 데이터를 뽑으면서,
#동시에 strip() 함수를 활용해서 문장 양옆 공백을 제거
print(review_data[i].text.strip())
# 보기 좋게, 그리고 매우 간단하게 개행해주기
print()
cnt += 1
[1]
책뿐만 아니라 다양한 물품 두기에 좋네요 인테리에도 좋습니다
[2]
조립하는데 대략 30분걸렸네요! 생각보다 작은 감이 없지 않아 있네요! 그래도 만족합니다
[3]
손가락을 잃고 책장을 얻었다…. 뿌듯 근데 제품이 조금 까져서 왔더라구요… 괜춘괜춘합니다 ㅠㅡㅠ 하나 더 부를 거 같은데 이번에만 안까져서 오길 ㅎ ㅡㅎ
[4]
조립 무조건 둘이서 하세요 혼자 하니까 두 시간 걸렸어요.. 못할 수준은 아닌데 둘이서 하면 30분정도면 끝냈을 듯..ㅠㅠ
[5]
깔끔하고 죠습니다컬렉션 올려놓기 딱 좋네요
1 - 5 페이지의 review 데이터를 수집
# Selenium 자동 브라우저가 아닌, beautifulsoup로 진행
# key point - url의 로직
# 1) https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token
# 2) https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&page=2&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token=V2c26c49798b678b5367dde9393aefc632a7ec4b849d05080fd331cef21fd252c8bfaf2e281921deb066e40748c3824d48&widget_env=100&widget_style=
# 3) https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&page=3&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token=V2c26c49798b678b5367dde9393aefc632a7ec4b849d05080fd331cef21fd252c8bfaf2e281921deb066e40748c3824d48&widget_env=100&widget_style=
# 첫번째 페이지의 경우
# 제품 리뷰를 보여주는 위젯을 처음 로드
# 두번째, 세번째 페이지 부터
# 로딩된 위젯 내에서 페이징(페이지를 왔다갔다 하는 것)
# 다음 페이지의 리뷰를 로딩
for loop을 사용해서 1부터 5페이지의 리뷰를 가져오기
for pageNo in range(1,6):
# 1부터 5페이지를 반복하면서, pageNo 변수에 반복횟수 할당
url = f'https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&page={pageNo}&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token=V254ca6537c1b2757aa9e8c7312e876ef2a7a2da247d227f6d38490f3229bdacf8c4958b96b0d37116bb8b48ccc9faf881&widget_env=100&widget_style='
# url에 get 요청을 보내기
res = req.get(url,headers=head)
# 현재 긁어오는 페이지 번호를 format 함수로 기재 출력
print(f"[현재 페이지 번호 : {pageNo}]")
# BeautifulSoup 객체화
soup = bs(res.text, 'lxml')
# Select 함수를 써서, 리뷰 '들'을 추출
review_data1 = soup.select('div.review_list_v2__message.js-collapsed-review-content.js-translate-text')
#####################여기까지가 추출과정 ###########################
# 여전히 공백은 존재!
# 2중 for loop을 돌려서 공백을 제거
for i in range(len(review_data1)):
# strip() 함수를 활용해서 문장 양옆 공백을 제거
print(review_data1[i].text.strip())
# 아주 간단하고 아날로그하게 개행
print()
# CAPTCHA나 '나는 로봇이 아닙니다' 클릭항목을 기억하는지?
# 만약 너무 많은 요청이 들어오면은, CAPTCHA 등 사용자를 인증하는 등의 방법으로 보호
# time.sleep() 일정한 시간 간격을 주어서, 웹페이지에게 요청
time.sleep(1)
# 적절한 딜레이 시간을 설정하는 것이 중요
print("수집 완료!")
[현재 페이지 번호 : 1]
책뿐만 아니라 다양한 물품 두기에 좋네요 인테리에도 좋습니다
조립하는데 대략 30분걸렸네요! 생각보다 작은 감이 없지 않아 있네요! 그래도 만족합니다
손가락을 잃고 책장을 얻었다…. 뿌듯 근데 제품이 조금 까져서 왔더라구요… 괜춘괜춘합니다 ㅠㅡㅠ 하나 더 부를 거 같은데 이번에만 안까져서 오길 ㅎ ㅡㅎ
조립 무조건 둘이서 하세요 혼자 하니까 두 시간 걸렸어요.. 못할 수준은 아닌데 둘이서 하면 30분정도면 끝냈을 듯..ㅠㅠ
깔끔하고 죠습니다컬렉션 올려놓기 딱 좋네요
[현재 페이지 번호 : 2]
조립 쉽고 간편해여오피스텔에서 공간나누기 용으로 쓰고 있어요
조립도 쉽고 튼튼한것 같아서 좋아요(2022-08-07 11:31:14 에 등록된 네이버 페이 구매평)
튼튼하고 예뻐요! 오래 사용할 것 같아요
수납 많이 되고 좋아요 하나 더사려구요
조립은 혼자는 어렵고 한명이 잡아줘야되요원룸에 딱일듯해요 아이가 원룸형으로 꾸미고싶데서 구입했어요
[현재 페이지 번호 : 3]
생각외로 공간도 넓고, 튼튼해서 책을 많이 올려놓아도 괜찮습니다! 이 가격에 이정도면 매우 추천!
조립하는데 조금 힘들었지만 물건 올려두기에 너무 좋은거같아요(2021-11-28 11:12:09 에 등록된 네이버 페이 구매평)
선물로 사준거라 사진은 없지만 엄청나게 만족한다고 합니다!!이거를 처음으로 쭉 구매하겠습니다~
책장이 필요해서 여러군데 돌아보던중에 우연히 알게된 원룸만들기에서 맘에 드는 책장 발견 바로 신청했습니다.배송도 빠르고 받았을때 생각보다 묵직해서 조립하고 나니 너무 예쁘네요.조립도 어렵지 않았고 무엇보다 책까지 정리했더니 너무 만족스럽습니다!!
두번째 구매이고 아이방에 딱이네요(2021-08-07 19:37:03 에 등록된 네이버 페이 구매평)
[현재 페이지 번호 : 4]
책장이 너무나 좋습니다 만족스러워요 ㅎㅎ
뭐 만족하면서 쓰고있습니다~!(2021-07-20 12:54:28 에 등록된 네이버 페이 구매평)
철제 선반만 두번째 구매에요! 하나는 키친에 하나는 발코니에 뒀는데 흔들거리지도 않고 아주 튼튼하고 좋아요. 특히 이번에 구입한 것은 가장 키 큰 선반이었는데 안정적이어서 더 만족스러워요.
예쁘고 가성비 좋음 조립하기 귀찮긴 하지만 하고나면 뿌듯 저 철 부분이 뜯어졌길래 ( 내가 조립하다가 뜯음) 그냥 철 뺐는데 훨씬 나음
배송 흠집 없이 잘 왔고요 조립도 혼자 어려움 없이 가능 했습니다
[현재 페이지 번호 : 5]
주방 정리 하려고 구매했구요, 여러군데 비교해서 샀는데 가격도 괜찮고 정말 튼튼해요! 그래서 이번에 하나 더 사서 다른 방 정리하는데도 쓰려고 합니다
오자마자포장해체대한민국 종특으로 인해 조립설명서(가 뭔데?)따위는 그냥 지나치고다리 못 볼트 너트 판자 확인후 조립남자 혼자서 10분만에 조립나무판자 코팅도 생각보다 깔끔하고철제 목조치고는 생각보다 무겁다 느낌은 아닌데가격치고는 튼튼하다는 느낌조립하실때 나무판자 너무 꽉조이지 말고 3~4바퀴 남겨놓고한층씩 나무판자 모두 끼운 후에 마지막에 조이세요 그래야 조립하기 수월합니다댓츠잇
조립은 여자혼자하기 힘들지않아요 손에 힘이조금 들어갈뿐설명서도 처음에는 어려웠지만 금방 조립했어요가게에 진열장이 필요했는데 딱좋아요나무판자가 무거워서 살짝 버거웠지만 오히려 안정감있네요한개더 구매할 예정입니다
갠춘삼춘함 튼튼하고 좋네여
배송도빠르고 마음에들엇니 두번샀어영
수집 완료!
params 매개변수를 사용하여 간단하게 '쿼리 스트링'을 추가하는 방법
# params 매개변수를 사용하여 간단하게 '쿼리 스트링'을 추가하는 방법
# 'https://review4.cre.ma/bodyluv.kr/products/reviews?'
# ? url의 끝에 ?를 포함여여 요청 매개변수 (request parameter)를 전달하기 위한 방법
for pageNo in range (1,6):
print(f"[{pageNo}]")
url2 = 'https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token=V2fdea91d9154a1650500dd8e1efb74b14a4608f8a425a825f0658acf664bbd925f5a3deadcfa5bf8f9928c6d18579a1c6&widget_env=100&widget_style='
res2 = req.get(url2, headers = head, params = {'page': pageNo})
# params - dictionary로 정의
# key:
# page= 의 page로 정의
# value:
# page=3의 3
#FAQ: 첫번째 페이지에는 page=1이 생략이 되는건가요?
# 페이지 번호는 생략했지만
# page=1이 기본값으로 설정이 되어 있습니다.
# 객체화 진행
soup2 = bs(res2.text,'lxml')
# 리뷰데이터 수집 및 출력
review_data2 = soup2.select('div.review_list_v2__message.js-collapsed-review-content.js-translate-text')
for i in range(len(review_data2)):
# 텍스트 추출 및 불필요한 공백 제거
print(review_data2[i].text.strip())
# 보기 좋게 개행
print()
time.sleep(2)
print('수집완료')
[1]
책뿐만 아니라 다양한 물품 두기에 좋네요 인테리에도 좋습니다
조립하는데 대략 30분걸렸네요! 생각보다 작은 감이 없지 않아 있네요! 그래도 만족합니다
손가락을 잃고 책장을 얻었다…. 뿌듯 근데 제품이 조금 까져서 왔더라구요… 괜춘괜춘합니다 ㅠㅡㅠ 하나 더 부를 거 같은데 이번에만 안까져서 오길 ㅎ ㅡㅎ
조립 무조건 둘이서 하세요 혼자 하니까 두 시간 걸렸어요.. 못할 수준은 아닌데 둘이서 하면 30분정도면 끝냈을 듯..ㅠㅠ
깔끔하고 죠습니다컬렉션 올려놓기 딱 좋네요
[2]
조립 쉽고 간편해여오피스텔에서 공간나누기 용으로 쓰고 있어요
조립도 쉽고 튼튼한것 같아서 좋아요(2022-08-07 11:31:14 에 등록된 네이버 페이 구매평)
튼튼하고 예뻐요! 오래 사용할 것 같아요
수납 많이 되고 좋아요 하나 더사려구요
조립은 혼자는 어렵고 한명이 잡아줘야되요원룸에 딱일듯해요 아이가 원룸형으로 꾸미고싶데서 구입했어요
[3]
생각외로 공간도 넓고, 튼튼해서 책을 많이 올려놓아도 괜찮습니다! 이 가격에 이정도면 매우 추천!
조립하는데 조금 힘들었지만 물건 올려두기에 너무 좋은거같아요(2021-11-28 11:12:09 에 등록된 네이버 페이 구매평)
선물로 사준거라 사진은 없지만 엄청나게 만족한다고 합니다!!이거를 처음으로 쭉 구매하겠습니다~
책장이 필요해서 여러군데 돌아보던중에 우연히 알게된 원룸만들기에서 맘에 드는 책장 발견 바로 신청했습니다.배송도 빠르고 받았을때 생각보다 묵직해서 조립하고 나니 너무 예쁘네요.조립도 어렵지 않았고 무엇보다 책까지 정리했더니 너무 만족스럽습니다!!
두번째 구매이고 아이방에 딱이네요(2021-08-07 19:37:03 에 등록된 네이버 페이 구매평)
[4]
책장이 너무나 좋습니다 만족스러워요 ㅎㅎ
뭐 만족하면서 쓰고있습니다~!(2021-07-20 12:54:28 에 등록된 네이버 페이 구매평)
철제 선반만 두번째 구매에요! 하나는 키친에 하나는 발코니에 뒀는데 흔들거리지도 않고 아주 튼튼하고 좋아요. 특히 이번에 구입한 것은 가장 키 큰 선반이었는데 안정적이어서 더 만족스러워요.
예쁘고 가성비 좋음 조립하기 귀찮긴 하지만 하고나면 뿌듯 저 철 부분이 뜯어졌길래 ( 내가 조립하다가 뜯음) 그냥 철 뺐는데 훨씬 나음
배송 흠집 없이 잘 왔고요 조립도 혼자 어려움 없이 가능 했습니다
[5]
주방 정리 하려고 구매했구요, 여러군데 비교해서 샀는데 가격도 괜찮고 정말 튼튼해요! 그래서 이번에 하나 더 사서 다른 방 정리하는데도 쓰려고 합니다
오자마자포장해체대한민국 종특으로 인해 조립설명서(가 뭔데?)따위는 그냥 지나치고다리 못 볼트 너트 판자 확인후 조립남자 혼자서 10분만에 조립나무판자 코팅도 생각보다 깔끔하고철제 목조치고는 생각보다 무겁다 느낌은 아닌데가격치고는 튼튼하다는 느낌조립하실때 나무판자 너무 꽉조이지 말고 3~4바퀴 남겨놓고한층씩 나무판자 모두 끼운 후에 마지막에 조이세요 그래야 조립하기 수월합니다댓츠잇
조립은 여자혼자하기 힘들지않아요 손에 힘이조금 들어갈뿐설명서도 처음에는 어려웠지만 금방 조립했어요가게에 진열장이 필요했는데 딱좋아요나무판자가 무거워서 살짝 버거웠지만 오히려 안정감있네요한개더 구매할 예정입니다
갠춘삼춘함 튼튼하고 좋네여
배송도빠르고 마음에들엇니 두번샀어영
수집완료
# 왜 이렇게 까지 해야 할까? 첫번째 방법이 더 편한거 같은데?
# 서버와 클라이언트 간에 데이터를 주고 받는 방법 중 하나로 알고 있으면 적합하다.
# SQL 쿼리문과 비슷
# SQL문과 유사하게 '쿼리 스트링'을 사용해서 원하는 데이터를 추출 / 필터링
# 필요한 데이터를 무조건 쓸어담는게 아니라, 경계를 정해주고 필요한 데이터를 세부적으로 뽑아낼 수 있다.
txt 파일 생성 방법
# 파일을 생성하고, 열고, '작성할거야'하는 선언을 맨 앞에 해줍시다.
f = open('review.txt', 'w', encoding = 'euc-kr')
for pageNo in range(1,6):
# 1부터 5페이지를 반복하면서, pageNo 변수에 반복횟수 할당
url = f'https://review7.cre.ma/oneroommaking.com/products/reviews?app=0&iframe=1&iframe_id=crema-product-reviews-2&page={pageNo}&parent_url=https%3A%2F%2Foneroommaking.com%2Fproduct%2Fdetail.html%3Fproduct_no%3D1911%26cate_no%3D61%26display_group%3D1&product_code=1911&secure_device_token=V254ca6537c1b2757aa9e8c7312e876ef2a7a2da247d227f6d38490f3229bdacf8c4958b96b0d37116bb8b48ccc9faf881&widget_env=100&widget_style='
# url에 get 요청을 보내기
res = req.get(url,headers=head)
# 현재 긁어오는 페이지 번호를 format 함수로 기재 출력
print(f"[현재 페이지 번호 : {pageNo}]")
# txt 파일 내 저장
f.write(f"\n[현재 페이지 번호 : {pageNo}]\n")
# BeautifulSoup 객체화
soup = bs(res.text, 'lxml')
# Select 함수를 써서, 리뷰 '들'을 추출
review_data1 = soup.select('div.review_list_v2__message.js-collapsed-review-content.js-translate-text')
#####################여기까지가 데이터 추출 과정 ###########################
# 여전히 공백은 존재!
# 2중 for loop을 돌려서 공백을 제거
for i in range(len(review_data1)):
# strip() 함수를 활용해서 문장 양옆 공백을 제거
print(review_data1[i].text.strip())
# 아주 간단하고 아날로그하게 개행
print()
# txt 파일 내 저장
f.write(review_data1[i].text.strip()+'\n')
# CAPTCHA나 '나는 로봇이 아닙니다' 클릭항목을 기억하는지?
# 만약 너무 많은 요청이 들어오면은, CAPTCHA 등 사용자를 인증하는 등의 방법으로 보호
# time.sleep() 일정한 시간 간격을 주어서, 웹페이지에게 요청
time.sleep(1)
# 적절한 딜레이 시간을 설정하는 것이 중요
print("수집 완료!")
f.close()
# 파일을 닫기
[현재 페이지 번호 : 1]
책뿐만 아니라 다양한 물품 두기에 좋네요 인테리에도 좋습니다
조립하는데 대략 30분걸렸네요! 생각보다 작은 감이 없지 않아 있네요! 그래도 만족합니다
손가락을 잃고 책장을 얻었다…. 뿌듯 근데 제품이 조금 까져서 왔더라구요… 괜춘괜춘합니다 ㅠㅡㅠ 하나 더 부를 거 같은데 이번에만 안까져서 오길 ㅎ ㅡㅎ
조립 무조건 둘이서 하세요 혼자 하니까 두 시간 걸렸어요.. 못할 수준은 아닌데 둘이서 하면 30분정도면 끝냈을 듯..ㅠㅠ
깔끔하고 죠습니다컬렉션 올려놓기 딱 좋네요
[현재 페이지 번호 : 2]
조립 쉽고 간편해여오피스텔에서 공간나누기 용으로 쓰고 있어요
조립도 쉽고 튼튼한것 같아서 좋아요(2022-08-07 11:31:14 에 등록된 네이버 페이 구매평)
튼튼하고 예뻐요! 오래 사용할 것 같아요
수납 많이 되고 좋아요 하나 더사려구요
조립은 혼자는 어렵고 한명이 잡아줘야되요원룸에 딱일듯해요 아이가 원룸형으로 꾸미고싶데서 구입했어요
[현재 페이지 번호 : 3]
생각외로 공간도 넓고, 튼튼해서 책을 많이 올려놓아도 괜찮습니다! 이 가격에 이정도면 매우 추천!
조립하는데 조금 힘들었지만 물건 올려두기에 너무 좋은거같아요(2021-11-28 11:12:09 에 등록된 네이버 페이 구매평)
선물로 사준거라 사진은 없지만 엄청나게 만족한다고 합니다!!이거를 처음으로 쭉 구매하겠습니다~
책장이 필요해서 여러군데 돌아보던중에 우연히 알게된 원룸만들기에서 맘에 드는 책장 발견 바로 신청했습니다.배송도 빠르고 받았을때 생각보다 묵직해서 조립하고 나니 너무 예쁘네요.조립도 어렵지 않았고 무엇보다 책까지 정리했더니 너무 만족스럽습니다!!
두번째 구매이고 아이방에 딱이네요(2021-08-07 19:37:03 에 등록된 네이버 페이 구매평)
[현재 페이지 번호 : 4]
책장이 너무나 좋습니다 만족스러워요 ㅎㅎ
뭐 만족하면서 쓰고있습니다~!(2021-07-20 12:54:28 에 등록된 네이버 페이 구매평)
철제 선반만 두번째 구매에요! 하나는 키친에 하나는 발코니에 뒀는데 흔들거리지도 않고 아주 튼튼하고 좋아요. 특히 이번에 구입한 것은 가장 키 큰 선반이었는데 안정적이어서 더 만족스러워요.
예쁘고 가성비 좋음 조립하기 귀찮긴 하지만 하고나면 뿌듯 저 철 부분이 뜯어졌길래 ( 내가 조립하다가 뜯음) 그냥 철 뺐는데 훨씬 나음
배송 흠집 없이 잘 왔고요 조립도 혼자 어려움 없이 가능 했습니다
[현재 페이지 번호 : 5]
주방 정리 하려고 구매했구요, 여러군데 비교해서 샀는데 가격도 괜찮고 정말 튼튼해요! 그래서 이번에 하나 더 사서 다른 방 정리하는데도 쓰려고 합니다
오자마자포장해체대한민국 종특으로 인해 조립설명서(가 뭔데?)따위는 그냥 지나치고다리 못 볼트 너트 판자 확인후 조립남자 혼자서 10분만에 조립나무판자 코팅도 생각보다 깔끔하고철제 목조치고는 생각보다 무겁다 느낌은 아닌데가격치고는 튼튼하다는 느낌조립하실때 나무판자 너무 꽉조이지 말고 3~4바퀴 남겨놓고한층씩 나무판자 모두 끼운 후에 마지막에 조이세요 그래야 조립하기 수월합니다댓츠잇
조립은 여자혼자하기 힘들지않아요 손에 힘이조금 들어갈뿐설명서도 처음에는 어려웠지만 금방 조립했어요가게에 진열장이 필요했는데 딱좋아요나무판자가 무거워서 살짝 버거웠지만 오히려 안정감있네요한개더 구매할 예정입니다
갠춘삼춘함 튼튼하고 좋네여
배송도빠르고 마음에들엇니 두번샀어영
수집 완료!
반응형
'Python 공부 > 웹크롤러 대마왕편 (이론)' 카테고리의 다른 글
[23.05.03] 웹크롤링 라이브러리 (한솥 도시락, pokemon, kakaomap) (0) | 2023.05.04 |
---|---|
[23.05.01] 웹크롤링 라이브러리 (기사 스크랩, melon chart top100 수집) (1) | 2023.05.01 |