반응형

1. G마켓 크롤링

지난 번 웹  크롤링을 통해 올리브영의 랭킹 정보를 긁어 모았고, 이번에는 G 마켓의 랭킹 정보를 크롤링 해 보려 한다.

https://kmrho1103.tistory.com/entry/Python-%EC%9B%B9%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%98%AC%EB%A6%AC%EB%B8%8C%EC%98%81-%EB%9E%AD%ED%82%B9-%ED%81%AC%EB%A1%A4%EB%A7%81

 

[Python] 웹 크롤링 - 올리브영 랭킹 크롤링

0. 웹 크롤링이 뭐야? 크롤링은 인터넷 상에서 웹 페이지를 순회하고, 웹 사이트에서 정보를 추출하는 자동화된 프로세스를 말합니다. 크롤링은 웹 크롤러 또는 스파이더라고 불리는 소프트웨어

kmrho1103.tistory.com

 

2. G마켓 랭킹

https://category.gmarket.co.kr/listview/L100000005.aspx

 

G마켓-화장품/향수

컨실러란? 기미,잡티,주근깨,여드름흔적등을 감쪽같이 커버하여 깨끗한피부연출을 해주는 제품.국소부위용과 얼굴전체커버용 닫기

category.gmarket.co.kr

위 주소로 들어가면 아래 처럼 G마켓에서 잘 팔리는 상품들의 랭킹 정보를 볼 수 있다.

 

3. 파이썬 코드

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = requests.get('https://www.gmarket.co.kr/n/best?jaehuid=200011415&viewType=C&largeCategoryCode=100000005')
html = BeautifulSoup(url.text)

products = []
for i in html.find_all('div',class_='thumb'):
    products.append(i.find('img')['alt']) # 이미지 태그의 'alt' 속성에 상품 이름이 들어 있다
    
price = []
for i in html.find_all('div',class_='s-price'):
    price.append(i.text.split('할인가')[1].split('원')[0])
    
df = pd.DataFrame({'상품명':products,'가격':price})
df

 

가격 태그 정보를 좀 더 분석해보면 깔끔하게 가져올 수 있을 것 같다는 생각이 드는데 좀 더 공부해야겠다.

 

 

 

 

 

반응형
Posted by 마르띤
,
반응형

네이버 뉴스 크롤링을 계속해서 해보려 한다. 이 번에는 여러 페이지, 그러니까 검색 결과 페이지를 1, 2, 3이렇게 늘려가며 여러 페이지의 글을 크롤링 하는 프로젝트이다.

 

아래 링크는 먼저 작성한 글로써, 한 페이지에 나오는 여려개 뉴스를 크롤링 하는 내용이다. 크게 어렵지 않은 짧은 코딩이니 따라하는데 크게 어렵지는 않을 것이다.

 

 

[크롤링] 파이썬으로 네이버 뉴스 크롤링 하기 - 여러 뉴스를 한번에

에코프로 뉴스 크롤링은 아래 글을 보면 된다. 이번에는 검색 시 나오는 여러 뉴스를 크롤링 해보려 한다. https://kmrho1103.tistory.com/entry/%ED%81%AC%EB%A1%A4%EB%A7%81-%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C-%EB%89%B4%EC%8

kmrho1103.tistory.com

 
이전 크롤링 방식을 통해서 1 페이지에 나오는 여러 네이버 뉴스를 한 번에 크롤링 해 보았고, 이 번에는 1~5페이지 네이버 뉴스를 모두 크롤링 해보려 한다. 전체 크롤링 코드는 아래와 같다. 전체 7줄의 짧은 코드로 네이버 뉴스의 많은 페이지를 크롤링 할 수 있다. 순서대로 보면, 패키지를 불러오고, url을 읽은 다음 태그 정보를 보고 뉴스 제목을 긁어오는 순서이다.
 

1
2
3
4
5
6
7
8
9
10
import requests
from bs4 import BeautifulSoup
 
for n in range(1,52,10):
    url = requests.get(f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=60&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start={n}')
    html = BeautifulSoup(url.text)
 
    for i in html.find_all('a',class_='news_tit'):
        print(i.text)
 
cs

 
코드가 길지 않아 아주 자세한 설명이 필요한 건 아니지만, 상세 코드를 보면 아래와 같다.
 

for 문 반복문으로 여러 뉴스를 모아온다. 
for n in range(1,52,10):
    url = requests.get(f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=60&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start={n}')
    html = BeautifulSoup(url.text)

 - http:// ~ 뉴스 주소 앞에 format 을 입력하기 위해 f를 입력
 - 주소의 페이지 부분에 넣을 format 자리에 {n} 입력
 - page 넘버가 1, 11, 21 이렇게 10 단위로 커지므로, range(1,52,10)을 적용

 

처음 format의 f을 잘 몰랐을 때 어려웠는데, 코드를 이해한 이후로는 정말 자주 사용하고 있는 내용이다. 모를 때는 따라쳐보는 것이 가장 좋은 듯하다. 파이썬 명언 중 백문이불여일타가 괜히 있는게 아닌 것 같다.
 

for문으로 태그 정보 불러오기
for i in html.find_all('a',class_='news_tit'):
        print(i.text)

태그 정보를 읽어낸 후 for문으로 반복 적용하여 text를 긁어내는 과정이다. 이 짧은 코드 몇 줄만 따라하면 네이버 뉴스 크롤링도 어렵지 않게 쉽게 따라할 수 있을 것이다.

 

for문에 대해 별도 글을 작성하겠지만, 간단하게 예시를 들면 아래와 같다. 간단한 숫자 리스트를 반복하며 출력하는 예시이다:

numbers = [1, 2, 3, 4, 5]

for number in numbers:
    print(number)

위 코드에서 numbers 리스트의 각 요소를 순서대로 number 변수에 할당하여 반복문을 실행하면서 각 숫자가 출력된다. 또 다른 예시로, 문자열 리스트를 반복하며 각 문자열의 길이를 출력하는 코드는 아래와 같다:

fruits = ['apple', 'banana', 'cherry', 'date']

for fruit in fruits:
    print(f"The length of '{fruit}' is {len(fruit)}")

 

이렇게 for문을 사용하면 리스트, 튜플, 문자열 등의 객체를 순회하며 각 항목을 처리할 수 있다. for문을 사용하여 반복 작업을 수행하면 코드를 간결하게 유지하고 반복적인 작업을 쉽게 처리할 수 있다.

 

for문은 프로그래밍에서 반복 작업을 처리하는 중요한 도구 중 하나이다. 

- 반복 작업 처리: 많은 작업은 반복적으로 수행되어야 한다. for문을 사용하여 데이터나 작업을 반복적으로 처리할 수 있어서 코드를 간결하게 유지할 수 있다.

- 코드의 가독성: for문을 사용하면 반복 작업의 로직을 명확하게 표현할 수 있다. 이로 인해 코드의 가독성이 향상되며, 다른 개발자들이 코드를 이해하기 쉬워진다.

- 반복 횟수 지정: 반복 작업을 일정한 횟수만큼 수행해야 할 때 range() 함수와 함께 for문을 사용하여 반복 횟수를 지정할 수 있다.

- 파일 처리: 파일의 각 줄을 읽어오거나 파일에 쓰는 작업에서도 for문을 활용할 수 있다.

 

이러한 이유로 for문은 프로그래밍에서 핵심적인 역할을 하며, 프로그램을 효율적으로 작성하고 유지 관리하는 데 도움을 준다.

반응형
Posted by 마르띤
,
반응형

1. 파이썬으로 네이버 뉴스 크롤링 하기

 

파이썬을 사용하여 네이버 뉴스 크롤링을 수행하는 것은 기본적으로 가능하지만, 몇 가지 어려움이 있을 수 있다. 네이버 뉴스 크롤링에는 다음과 같은 요소들이 관련됩니다:

1) 동적 웹 페이지: 네이버 뉴스 페이지는 주로 동적으로 생성되는 페이지입니다. 자바스크립트로 로딩되는 내용이 많아서 단순한 HTML 파싱만으로는 원하는 정보에 접근하기 어려울 수 있습니다. 이 경우에는 requests와 BeautifulSoup만으로는 부족할 수 있으며, 자바스크립트를 실행하고 동적으로 로딩되는 데이터에 접근하기 위해 추가적인 라이브러리나 기술이 필요할 수 있습니다.

2) 로봇 배제 표준 (Robots.txt): 네이버 뉴스 사이트도 로봇 배제 표준을 사용하여 크롤링을 제한할 수 있습니다. 따라서 robots.txt 파일을 확인하고 적절한 접근 권한을 준수해야 합니다.

3) 네이버 뉴스 구조의 변경: 네이버는 뉴스 페이지의 디자인이나 구조를 변경할 수 있습니다. 이에 따라 크롤링 코드도 조정해야 할 수 있습니다.

4) 데이터 정제 및 가공: 네이버 뉴스 페이지에서 얻은 데이터는 HTML로 제공되며, 이를 파싱하고 원하는 형식으로 가공해야 합니다. 가끔 HTML 구조가 복잡할 수 있어서 데이터를 추출하거나 정제하는 과정이 어려울 수 있습니다. 이러한 어려움들은 파이썬을 이용한 네이버 뉴스 크롤링을 시도할 때 고려해야 할 사항입니다. 도전적인 부분이 있을 수 있으므로, 필요한 기술과 라이브러리를 숙지하고 웹 크롤링에 관련된 법적 및 윤리적 규칙을 준수하면서 진행하는 것이 좋습니다.

 

2. 파이썬 코드와 결과값

<파이썬 코드 내용>

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit').text

<결과>

"에코프로 '황제주' 복귀했지만…떨고 있는 개미들"

 

파이썬 크롤링 할 때 가장 많이 쓰는 함수가 아마도 BeautifulSoup일 것이다. 이는 주로 웹 페이지의 HTML 또는 XML 코드를 파싱하고 원하는 정보를 추출하는 데 사용된다.  웹 페이지에서 정보를 수집하거나 원하는 데이터를 추출해야 할 때 BeautifulSoup을 사용한다. 웹 사이트의 HTML 코드를 파싱하여 제목, 본문 내용, 링크, 이미지 등을 추출할 수 있다. 크롤링한 데이터를 정제하거나 필요한 형식으로 변환해야 할 때도 BeautifulSoup을 사용한다. 추출한 데이터 중에서 필요없는 부분을 제거하거나, 특정 패턴을 가진 데이터를 변환하는 작업에 활용된다. 웹 사이트의 구조를 파악하고 태그의 계층 구조를 분석해야 할 때 BeautifulSoup을 사용한다. 그리고  웹 페이지 내의 특정 태그를 찾고 다른 태그와의 관계를 이해하는 데 도움을 준다.HTML에서 텍스트 데이터를 추출하여 자연어 처리 작업을 수행하거나 특정 키워드를 찾는 등의 텍스트 분석 작업에도 BeautifulSoup을 활용할 수도 있다. 결론적으로, BeautifulSoup은 웹 크롤링과 스크레이핑 작업을 수행할 때 웹 페이지의 구조를 이해하고 원하는 정보를 추출하고 처리하는 데 유용한 도구이다.

 

3. 파이썬 코드 내용 설명

<파이썬 코드 내용 설명>
먼저 네이버 뉴스에서 "에코프로"라는 키워드로 검색을 해보자

 
여러 페이지를 크롤링 하기 위해 맨 아래 페이지 넘버에서 1을 클릭해주고 나서 url을 복사해 주면 된다. 그러면 아래 처럼 url 맨 마지막이 1로 끝나는 걸 알 수 있다. url은 사이트마다 구조가 다르니 모든 사이트라 이 규칙을 따르는건 아니기에 주의해야 한다.
 
https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=44&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1

태그 a 아래 class 속성은 'news_tit'임을 알 수 있다. 
 

위 내용까지 크롤링을 하면 아래와 같다.

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit')

그러면 아래와 같은 결과값이 나온다. 여기서 text만 뽑아주면 크롤링 완성!

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit').text

 

 크롤링은 많은 연습이 필요하고 익숙해져야 할 수 있는 작업인 것 같다. 매일매일 크롤링을 하지는 못하지만, 최소 1주일에는 1-2개 정도의 프로젝트를 진행하면서 그 감을 잃지 않으려고 노력하고 있다. 지금은 간단하게 네이버 뉴스의 제목정도를 크롤링 하는 수준이지만, 이러한 내용도 반복하다 보면, 제목, 내용, 내용 요약, 내용 요약 바탕으로 텍스트 마이닝 등의 작업도 할 수 있지 않을까 한다.
 

 

 

반응형
Posted by 마르띤
,
반응형

0. 웹 크롤링이 뭐야?

 

크롤링은 인터넷 상에서 웹 페이지를 순회하고, 웹 사이트에서 정보를 추출하는 자동화된 프로세스를 말합니다. 크롤링은 웹 크롤러 또는 스파이더라고 불리는 소프트웨어를 사용하여 이루어집니다. 이러한 소프트웨어는 웹 페이지의 내용을 다운로드하고 분석하여 원하는 정보를 추출하거나 웹 사이트의 구조와 링크를 파악하는 역할을 합니다.

크롤링의 주요 단계는 다음과 같습니다:

  1. 웹 페이지 다운로드: 크롤러는 웹 페이지의 HTML 코드를 다운로드하여 로컬로 저장합니다. 이 과정에서 웹 사이트의 서버에 부하를 주지 않도록 주의해야 합니다.
  2. HTML 분석: 다운로드한 HTML 코드를 파싱하여 웹 페이지의 구조와 내용을 분석합니다. 이를 통해 웹 페이지의 제목, 본문 내용, 이미지, 링크 등을 식별할 수 있습니다.
  3. 정보 추출: 분석한 HTML 코드에서 원하는 정보를 추출합니다. 예를 들어, 뉴스 웹사이트에서는 제목과 내용을 추출하거나, 제품 판매 사이트에서는 상품명과 가격을 추출할 수 있습니다.
  4. 링크 추출: 웹 페이지 내에 포함된 링크를 추출하여 다음에 크롤링할 페이지를 결정합니다. 이를 통해 웹 사이트 전체를 순회할 수 있습니다.
  5. 데이터 저장: 추출한 정보를 데이터베이스나 파일로 저장하여 나중에 활용할 수 있도록 합니다.

크롤링은 정보 수집이나 분석에 유용하지만, 합법적인 용도로 사용되어야 합니다. 일부 웹 사이트는 크롤링을 제한하기 위해 로봇 배제 표준(robots.txt) 파일을 사용하거나, 서비스 이용 약관에서 크롤링을 금지하는 조항을 포함할 수 있습니다. 합법성과 예의를 지키며 웹 크롤링을 수행하는 것이 중요합니다.

 

 

1.  올리브영 랭킹 크롤링

한국 올리브영은 주로 화장품, 스킨케어 제품, 메이크업 제품, 향수, 건강 보조제 등의 뷰티 제품을 판매하는 대형 뷰티 및 화장품 전문 매장 체인이다. 올리브영은 한국을 비롯한 다양한 국가에서 전 세계적으로 유명한 뷰티 브랜드의 제품을 한 자리에서 쉽게 구매할 수 있는 공간을 제공하며, 소비자들에게 다양한 제품 선택지와 트렌드에 맞는 뷰티 상품을 제공한다. 올리브영은 뷰티 제품에 초점을 맞추어 운영되는 브랜드로, 다양한 브랜드와 제품을 한 자리에서 만나보고 구매할 수 있는 공간으로 많은 사람들에게 이용되고 있다.

 

올리브영에서는 실시간 랭킹 정보를 제공해주고 있다. 이를 통해 현재 카테고리 별로 어느 제품들이 판매가 잘 되고 있는지 쉽게 알 수 있고, 썸네일을 클릭만 하면 쉽게 제품을 구매할 수 있어 제품 검색 시 큰 도움을 받고 있다. 이 글을 쓰고 있는 지금 현재 에스트라의 아토베리어 수딩크림이 1위를 달리고 있다.

올리브영 랭킹 바로가기 클릭
 
오늘은 이 올리브영 랭킹 정보를 크롤링 해보려 한다. 아래는 전체 코드이다.


1. 전체 코드 
import requests
import pandas as pd
from bs4 import BeautifulSoup

dic = {'user-agent' : 'Mozilla/5.0'}

url = requests.get('https://www.oliveyoung.co.kr/store/main/getBestList.do?dispCatNo=900000100100001&fltDispCatNo=10000010001&pageIdx=1&rowsPerPage=8',headers = dic)
html = BeautifulSoup(url.text)

brand = []
for i in html.find_all('span',class_='tx_brand'):
    brand.append(i.text)

product = []
for i in html.find_all('p',class_='tx_name'):
    product.append(i.text)

price = []
for i in html.find_all('span',class_='tx_cur'):
    price.append(i.find('span',class_='tx_num').text)
    
df = pd.DataFrame({'브랜드':brand, '상품':product,'가격':price})
df
2. 상세 코드

requests와 BeautifulSoup은 둘 다 파이썬을 이용하여 웹 크롤링 및 웹 스크레이핑을 수행할 때 사용되는 라이브러리이다.

  1. requests 라이브러리: requests는 HTTP 요청을 보내고 응답을 받는 작업을 처리하기 위한 라이브러리입니다. 웹 사이트의 데이터를 가져오기 위해 사용됩니다. 주로 웹 페이지의 HTML 코드를 가져오는 역할을 수행합니다. GET 또는 POST와 같은 HTTP 메서드를 사용하여 웹 서버로 요청을 보내고, 서버로부터 받은 응답을 받아서 처리합니다. 이러한 기능을 통해 웹 페이지의 내용을 다운로드하거나, API 엔드포인트로부터 데이터를 가져올 수 있습니다.
  2.  BeautifulSoup 라이브러리: BeautifulSoup은 파이썬의 HTML 및 XML 문서를 파싱하고 검색/조작하기 위한 라이브러리입니다. 주로 웹 페이지의 HTML 코드를 분석하고 원하는 정보를 추출하는 역할을 수행합니다. BeautifulSoup를 사용하여 웹 페이지의 태그, 클래스, 아이디 등을 기반으로 데이터를 필터링하거나 추출할 수 있습니다. 일반적으로, requests를 사용하여 웹 페이지의 내용을 가져온 후에는, 이를 BeautifulSoup로 파싱하여 원하는 정보를 추출하고 처리합니다. 즉, requests로 데이터를 가져오고, 그 후에 BeautifulSoup로 데이터를 다루는 것이 일반적인 크롤링 및 스크레이핑 작업의 흐름입니다.

# brand라는 빈 공간을 만들어 주고, 여기에 태그 정보 확인을 한다. 아래 사진 처럼 span이라는 태그 아래 tx_brand를 입력하면 된다.

brand = []
for i in html.find_all('span',class_='tx_brand'):
    brand.append(i.text)
 
# 상품정보도 위 브래드 정보를 넣는 방법과 유사하게 진행하면 된다.

product = []
for i in html.find_all('p',class_='tx_name'):
    product.append(i.text)
 
#가격 정보는 조금 달랐다. 왼쪽 썸네일에서 보는 것 처럼 할인 전 가격과 할인 후 가격 2개가 존재하였다. 
tag 정보에도 tx_org 아래 tx_num이 할인 전 가격이, tx_cur 아래 tx_num은 할인 후 가격이 나왔다.

price = []
for i in html.find_all('span',class_='tx_cur'):
    price.append(i.find('span',class_='tx_num').text)
 
 
# 데이터 프레임으로 만들기. 크롤링 된 모든 정보를 데이터 프레임으로 만드는 코드는 아래와 같다.
df = pd.DataFrame({'브랜드':brand, '상품':product,'가격':price})
df
 

짧다면 짧고 길다면 긴 파이썬 코드이다. 랭킹 정보를 직접 볼수도 있는데 이러한 파이썬 코드로 원하는 랭킹을 한 번에 볼 수 있는 내용이다. 추가적으로 썸네일 정보도 크롤링 하는 것을 공부 중인데, 공부가 완료되면 추가적으로 올릴 예정이다.

 

크롤링은 유용한 정보를 수집하고 가공하는 강력한 도구이지만, 몇 가지 어려움과 도전이 존재하기도 한다. 웹 사이트 구조의 변경: 웹 사이트는 자주 디자인 및 구조를 변경할 수 있습니다. 이로 인해 크롤러가 작동하지 않을 수 있거나, 이전에 동작하던 코드가 업데이트되어야 원하는 내용을 볼 수 있다. 혹시 그렇게 되면 블로그 내용도 업데이트 하려고 한다.

반응형
Posted by 마르띤
,