컴퓨터/Python
본격적으로 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=';;;')
본문에서는 처음 검색한 페이지만 찾았습니다.
다음에서는 검색 결과를 끝까지 찾으면서 또는 특정 시간까지 찾을 수 있도록 구현해 보도록 합시다.
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=';;;')
Python - [Pandas]자료 분석을 위한 Pandas 기초 (0) | 2022.08.01 |
---|---|
Python - [크롤링 실습] selenium으로 번개장터 조회하기 2 (페이지 순환) (0) | 2022.07.07 |
Python - Selenium3 ( 입력 / 클릭) (0) | 2022.05.09 |
Python - Selenium2 ( 대기 ) (0) | 2022.05.09 |
Robots.txt ? (크롤링과 규약) (0) | 2022.05.09 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet