이제 데이터 공부 안하는 블로그

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 21회차 미션 본문

파이썬

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 21회차 미션

공사노비 2020. 11. 22. 23:44

 
21일차

오늘은 쿠팡에 있는 페이지를 스크랩핑 하는 것을 학습했습니다.

먼저 get과 post 방식의 http 메소드를 다시한번 짚고 넘어가겠습니다.

get방식은 url자체에 정보를 담아 서버로 보내는 방식입니다. 우리가 쿠팡 페이지를 볼때 주소창을 클릭해보면 주소뒤에 다양한 정보들이 담겨 있습니다. 이렇게 쉽게 볼수 있도록 정보를 담아보내는것이 get입니다.

post는 url 자체에 정보를 담지 않고 html의 body안에 정보를 넣어 보내는것입니다. id나 비밀번호 같은 것들을 url 자체에 담아 보내게 되면 보안에 치명정이겠죠. 물론 post도 엄청나게 안전한것은 아니지만 get에 비해서는 나름대로 안전합니다.

그리고 나서 다시 쿠팡 스크래핑을 연습했습니다.
시작은 항상 똑같습니다. beautifulsoup을 사용합니다.

import requests
from bs4 import BeautifulSoup

url = “쿠팡주소 “
res = requests.get(url)
res.raise_for_status()

soup = BeautifulSoup(res.text, "lxml")

이렇게 해주고 코딩을 했습니다.

오늘 연습은 쿠팡에서 노트북을 검색해서 5번째 페이지까지 노트북의 이름과 가격, 평점, 평점수를 가져오는 것입니다.

items = soup.find_all("li", attrs={"class”:”search-product”})
개발자도구를 통해 보면 노트북의 검색한 페이지에서 노트북각 아이템들이 li태그에 class가 search-product였습니다. 이것을 통해 스크래핑 하는 코드입니다.
그리고 나서 for 반복문을 통해 원하는 정보를 가져옵니다.

for item in items:
name = item.find("div", attrs={"class":"name"}).get_text() # 노트북의 이름을 가져옵니다.
price = ///. #위에 이름과 마찬가지로 개발자도구를 통해 가격정보의 태그에 클래스를 가져옵니다.
rate =
rate_cnt =

마찬가지로 계속 다른정보를 가져올수 있습니다.
print(name, price, rate, rate_cnt)
하고 제대로 출력되는지 확인했습니다. 그런데 여기서 오류가 나서 더이상 실행되지 않았습니다. 이유는 쿠팡서버에서 사람이 아닌 프로그램이 접속하는걸 알고서 응답하지 않는 것이었습니다.
이 오류를 해결하려면 user-agent값을 주면됩니다.
url 변수 아래에 다음 코드를 추가해 줍니다.

headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"}

res변수도 아래처럼 변경해줍니다.
res = requests.get(url, headers=headers)

uset-agent는 구글에서 my user agent라고 검색하면 알수 있습니다.
이렇게 변경한후 실행하면 평점과 평점수가 없는 제품들 때문에 에러가 발생합니다.
그래서 rate와 rate_cnt값아래에 if 문을 추가해 줍니다.

rete = item.find_(“em”, attrs = {“class”:”rating”})
if rate:
rate = rate.get_text()
else:
rate =“평점없음”

rate_cnt 도 마찬가지로 if 문을 사용해줍니다.

이렇게 코드를 변경한후에 실행하면 네! 잘됩니다.
코드를 이렇게 수정해가면서 연습하니까 더 이해할수 있었던것 같습니다.

강의소개 https://bit.ly/33a7nvc