본문 바로가기

만들기/크롤러

(8)
교보문고 재고 확인 사이트 만들기 최근 친구 한 명과 가장 재미있게 하고 있는 것. 교보문고 재고 크롤러 만들기. http://neung.pythonanywhere.com 개발 진행중이라 아직 결과 페이지는 다듬어지지 않았다. 만들게 된 과정은 차차 적어 볼 생각. 파이썬, 장고, html&css, javascript 등을 비롯해 웹의 동작 방식에 대해서도 고민하게 된다. 302 redirect가 꽤 빈번히 일어난다는 것도 눈으로 목격했다. 뭣보다 셀레니움이 얼마나 느린지 체감하게 된 사이트. 리퀘스트 만세.. 셀레니움을 쓰지 않기 위해 얼마나 노력했는지 모른다. 사실 목표는 교보문고 뿐만 아니라 영풍문고와 반디앤루니스까지 같이 띄우는 것. 빨리는 못하더라도 천천히, 지치지 않고 꾸준히 진행 할 생각이다.
selenium과 requests 어떤 걸 쓸까 책 재고 크롤러를 만들고 있다. 동작 과정은 1. 네이버 책 페이지에서 해당 책에 대한 내용을 크롤링 2. 크롤링한 내용 중 각 서점의 URL을 얻어와 각 서점 페이지에서 재고 상황 크롤링 처음에는 모든 과정을 셀레니움으로 코딩을 했는데, 속도 문제로 인해 리퀘스트로 바꾸려 시도하는 과정에서 발생했던 오류들과 결론을 적어본다. 사실 서점 페이지들은 request 만으로도 잘 동작했는데, 문제는 네이버 책 페이지였다. request가 되는 페이지도 있고, 안되는 페이지도 있어 더 혼란스러웠다. 삽질을 조금 해 본 결과, 오디오 북이 있으면 request가 안 먹힌다는 사실은 알아냈지만... 그 사실을 알아냈다고 request가 동작하진 않았다. 1. request를 이용했을 시 500번 오류가 나왔다. 즉..
파이썬으로 크롤링하기 - WebDriverWait() 사용하기 크롤링할 내용이 많아지면, 파싱을 다 하기 전에 코드가 넘어가버리는 경우가 생겼다. 찾고자 하는 element를 받아 온 뒤 진행할 수 있는 해결책을 찾아보니 WebDriverWait가 나왔다. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox("drive 경로") driver.get("URL 주소") try: # ID가 myDynamicElement인 elem..
파이썬으로 크롤링하기 - 메가박스 서울 지점명 받아오기 selenium과 beautifulSoup을 이용해 서울 내 메가박스 영화관 리스트를 받아오려 한다. 1. 메가박스 사이트 소스코드 확인 영화관 리스트는 아래 URL에서 확인 가능하다. http://www.megabox.co.kr/?menuId=theater 소스코드를 살펴보면, 각 지역을 class명으로 구별해 둔 것을 볼 수 있다. 필자가 크롤링하려는 서울의 클래스명은 menu01이다. 해당 메뉴를 클릭하면, 클래스가 menu01 active로 변경되고, 아래쪽에 서울 내 지역들이 동적으로 나타나는 것을 볼 수 있다. 영화관 지점명은 id가 region_10인 ul > li > a태그의 text로 확인 가능하다. 2. 셀레니움을 이용한 동적코드 크롤링 필자가 작성한 코드는 다음과 같다. from se..
selenium으로 네이버 자동 로그인하기 네이버는 셀레니움으로 로그인을 시도하면 캡챠 페이지가 뜬다. 아래는 시도한 코드와 로그인이 막힌 모습. from selenium import webdriver driver = webdriver.Chrome(r'C:\Users\smddu\Documents\chromedriver\chromedriver.exe') driver.implicitly_wait(3) driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com') driver.find_element_by_name('id').send_keys('아이디') driver.find_element_by_name('pw').send_keys('비밀번호') dr..
selenium으로 자동로그인 하기 앞 포스터에서 웹드라이버를 이용해 브라우저를 띄워봤다. 조금 더 나가서 셀레니움을 이용해, 다음 사이트에 자동으로 로그인을 해보려 한다. 시작하기 앞서, selenium의 대표적인 메소드를 간단히 알아보자. get get은 앞서 우리가 사용했던 것 처럼, URL에 접근할 수 있도록 해주는 api다. driver.get('https://google.com') element element는 페이지의 단일 element에 접근할 수 있는 api로, html 태그의 속성 부분을 지정해서 접근할 수 있다. #단일 element에 접근 driver.find_element_by_name('name') driver.find_element_by_id('id') driver.find_element_by_xpath('/ht..
파이썬으로 크롤링하기 - selenium selenium은 webdriver라는 API를 통해 브라우저를 제어할 수 있는 모듈이다. 실제 웹 브라우저를 동작시키는 것이기 때문에, 동적인 페이지의 정보도 크롤링 할 수 있게 된다. 1. selenium 설치 pip install selenium 2. webdriver 설치 해당 게시글은 크롬을 기준으로 작성했습니다. 다른 브라우저를 사용하실 경우엔 해당 브라우저에 맞게 진행하시면 됩니다. 사용하는 크롬의 버전을 확인한다. 아래 사이트에서 버전에 맞는 드라이버를 받아준다. https://sites.google.com/a/chromium.org/chromedriver/downloads 다운로드 받은 파일의 압축을 풀면 웹드라이버 파일을 확인할 수 있다. 해당 파일의 경로는 나중에 selenium 객체..
파이썬으로 크롤링하기 - Beautiful Soup 파이썬으로 크롤링을 할 때, Beautiful Soup 모듈을 이용하면 편리하다. 1. Beautiful Soup 설치 pip install beautifulsoup4 2. 크롤링 하려는 페이지의 코드 확인 보안뉴스 메인페이지의 헤드라인 타이들을 긁어 올 생각이다. 확인해보니 li 태그 안에 제목들이 입력되어 있다. li 바로 위에 있는 ul의 클래스는 아래쪽에도 계속 반복되므로, 상위 div의 id를 이용하려 한다. 3. 헤드라인 가져오는 코드 from bs4 import BeautifulSoup import requests #보안뉴스 소스코드 가져오기 req = requests.get('https://www.boannews.com/Default.asp') soup = BeautifulSoup(req...