Python - [크롤링 실습] selenium으로 번개장터 조회하기 1 (접속,검색,취득)

컴퓨터/Python

728x90
반응형

서론

본격적으로  Python에서 크롤링을 해보기 위해서 번개장터 웹 페이지를 다뤄보도록 합시다.

초기 준비단계에서의  소스코드는 다음과 같습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


browser = webdriver.Chrome()
browser.implicitly_wait(time_to_wait=10)
browser.get('https://m.bunjang.co.kr/')

규약 확인하기 

우선 크롤링을 사용해도 되는지 먼저 확인을 해보도록 하겠습니다.

https://m.bunjang.co.kr/robots.txt에 들어가면 번개장터에서 봇들의 활동을 정의하고 있습니다.

User-agent: *
Allow: /
# Google Search Engine Sitemap
Sitemap: https://m.bunjang.co.kr/sitemap.xml
Sitemap: https://s3.ap-northeast-2.amazonaws.com/bunsitemap/production/sitemap.xml.gz

금지하는 항목이 보이지 않으니, 자유롭게 크롤링 실습을 해보도록 합시다.

 

검색 구현

원하는 검색을 하고 검색을 하는 과정을 살펴보도록  하겠습니다.

개발자 도구를 통해 검색탭을 확인해보면  다음과 같이 확인을 할 수 있습니다.

결과적으로 input 요소를 선택하여 원하는 값을 입력할 수 있습니다. 

메인화면에서는 다행히도 input요소가 하나만 존재해서 간단하게 처리가 가능했습니다.

itemname = input("검색어 입력 : ")

searchbar = browser.find_element(By.TAG_NAME,'input')
searchbar.send_keys(itemname)
searchbar.send_keys(Keys.ENTER)

데이터 수집 

검색을 구현한 후 데이터를 수집해보도록 합시다. 직접 검색을 해보도록 합니다.

원하는 검색 결과를 확인할 수 있습니다. 

이 제공된 웹 페이지에서 원하는 데이터 정보를  수집하면 됩니다.

 

하지만, 이런 웹 페이지에서 원하는 데이터를 어떻게 적절하게 수집하느냐는 상당히 많은 생각을 요구합니다. 

만약 서비스를 제공하는 사람이 형태를 바꾸어도 동작을 할 수 있는가 등의 질문 등  고려해야 될 부분이 많습니다.

하지만 본문에서는 크롤링에  익숙해지는 것이 목표니 가장 간단한 방법으로 구현하도록 하겠습니다.

 

글 작성당시 번개장터를 보니 alt(대체 텍스트)로 접근하는 방법이 가장 쉽다고 느껴졌습니다.

해당 이미지 태그로 접근하고 상위 객체(a태그)로 접근하면 손쉽게 정보들을 취득할 수 있게 됩니다.

Beautifulsoap을 이용하여 위 내용을 정리하면 아래와 같습니다.

#wating
WebDriverWait(browser,10).until(expected_conditions.visibility_of_element_located((By.CLASS_NAME ,"app")))


#html parsing
html = browser.page_source
html_parser = BeautifulSoup(html,features="html.parser")
list = html_parser.find_all(attrs={'alt':'상품 이미지'})


#print 
for item in list:
    aTag = item.parent.parent
    print("정보 : ", aTag.get_text(separator=';;;'))
    print("링크 : ", "https://m.bunjang.co.kr{}".format(aTag.attrs['href']))
    st = item.parent.parent.get_text(separator=';;;')
  • 명시적 대기를 추가해서 상품이 다 로드될 때까지 기다립니다.
  • Beaautifulsoup을 이용해서 요소를 찾습니다.
  • 찾은 요소에서 결과를 추출합니다.

다음 실습 목표

본문에서는 처음 검색한 페이지만 찾았습니다. 

다음에서는 검색 결과를 끝까지 찾으면서 또는 특정 시간까지 찾을 수 있도록  구현해 보도록 합시다.

 

전체 소스코드  보기

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait


from bs4 import BeautifulSoup

browser = webdriver.Chrome()
browser.implicitly_wait(time_to_wait=10)
browser.get('https://m.bunjang.co.kr/')



itemname = input("검색어 입력 : ")

searchbar = browser.find_element(By.TAG_NAME,'input')
searchbar.send_keys(itemname)
searchbar.send_keys(Keys.ENTER)

#wating
WebDriverWait(browser,10).until(expected_conditions.visibility_of_element_located((By.CLASS_NAME ,"app")))


#html parsing
html = browser.page_source
html_parser = BeautifulSoup(html,features="html.parser")
list = html_parser.find_all(attrs={'alt':'상품 이미지'})


#print
for item in list:
    aTag = item.parent.parent
    print("정보 : ", aTag.get_text(separator=';;;'))
    print("링크 : ", "https://m.bunjang.co.kr{}".format(aTag.attrs['href']))
    st = item.parent.parent.get_text(separator=';;;')
728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :