ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221130 TIL 인생 최초로 크롤링을 해보다
    TIL 2022. 11. 30. 14:18

     

    이번 과제에서는 카카오 선물하기를 비슷하게 만들어보아야 한다.

    쇼핑몰은 상품들을 파는 곳이기 때문에 상품 정보를 등록해야 하는데,

    페이지네이션을 제대로 구현해보기 위해서는 적어도 81개의 상품이 필요했다.

    그런데 81개의 제품의 이름, 제조사, 가격, 이미지 주소를 모두 한땀한땀 모아서 넣어주는 것이 너무나 소모적으로 느껴졌다.

     

    그래서 이제까지 도전해보고 싶었으나 하지 못했던 크롤링을 이용해 데이터를 모아보았다.

    확실히 html과 css, http를 배우기 전에 크롤링을 접했을 때보다 이해가 되는 부분이 많았고, 

    원하는 정보를 원하는대로 획득할 수 있었다.

    크롤링을 막아둔 웹사이트가 아니라면 html, css지식만으로도 쉽게 원하는 정보를 습득할 수 있었다.

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    import requests
    import time
    
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
    url = '크롤링할 주소'
    
    response = requests.get(url, headers=headers)
    
    time.sleep(5)
    
    soup = BeautifulSoup(response.content, 'html.parser')
    
    items = soup.select('.main li.item') // 선택자 알맞게 수정하기
    
    for i in range(len(items)):
        image = items[i].select('img')[0]
        
        print('  ('+
              str(i + 1) + ',' +
              image['alt'].split(' ', 1)[1] + ',' +
              image['alt'].split(' ', 1)[0] + ',' +
              items[i].select('strong')[-1].getText().replace(',', '') + ',' +
              image['alt'].split(' ', 1)[1] + ',' +
              image['src'].split('//')[1] +
              '),')

    User-Agent를 넣어주지 않았을 때 정보가 제대로 나오지 않는 경우가 있기 때문에

    header로 아래 사이트에서 획득한 User-Agent를 넣어주었다.

    https://www.useragentstring.com/

     

    위 코드에서 soup.select의 인자로는 css selector문법으로 원하는 요소를 선택하기 위한 값을 넣어주면 된다.

    요소의 속성 값은 '요소['key']'를 이용해서 얻을 수 있고, 얻은 값을 바탕으로 후처리를 하면 원하는 값을 얻을 수 있다.

    역시 해보고 싶은 걸 했을 때 의지가 불타오르는 것 같다.

     

    크롤링을 하라는 요구사항도 없었고, 크롤링을 해본 적이 없었기 때문에

    혹시 시간이 많이 쓰여서 요구사항을 구현하는데 쓰일 시간을 낭비하는 것은 아닐까 걱정을 조금했는데,

    오히려 집중도도 높아지고,

    크롤링으로 원하는 결과를 얻을 수 있었기 때문에 일일히 복사붙여넣기를 해야하는 수고로움도 덜 수 있었고,

    크롤링을 해서 원하는 정보를 습득하는 과정이 매우 재밌었다.

    앞으로는 써보지 않았지만 써보고 싶었던 기능이 있다면 시간 제한을 정해두고 시도를 해보는 것도 좋을 것 같다.

    댓글

Designed by Tistory.