본문 바로가기

만들기

(12)
04. Requests를 향한 여정 사실 현재 올린 사이트에는 셀레니움을 쓰지 않아서 정리 글 내용에서 뺄까 했는데, K가 셀레니움도 정리해야 한다고 강력히 주장해서 같이 올린다. 셀레니움에 대한 정리보다는, 셀레니움을 리퀘스트로 대체하며 생겼던 에피소드를 적어보려 한다. Selenium VS Requests 처음 셀레니움을 쓸 때는 그저 신기했다. 파이썬 코드 몇 줄로 브라우저 창이 혼자 실행되고 클릭까지 되다니. 그저 재밌어 연습한답시고 다음, 네이버 자동 로그인 코드를 짰었다. 다음은 여기, 네이버 코드는 여기. 네이버는 너무 빠르게 넘어가면 봇으로 인식하고 캡챠가 떠서 좀 더 까다로웠다. 어쨌든, 우리가 올린 재고 사이트를 처음 코딩할 때는 셀레니움을 썼다. 그러나 웹에 올려보고 이건 아니다 싶어 리퀘스트로만 코드를 짰는데, 그 이..
03. 재고 크롤러(2) 앞의 글에서 이어지는 내용이다. 이번 글에서는 decompose와 for문에 대해 짧게 짚고 넘어가려 한다. 전체코드 def getStock(isbn): url = 'http://www.kyobobook.co.kr/prom/2013/general/StoreStockTable.jsp?barcode=' + isbn + '&ejkgb=KOR' res = requests.get(url) soup = BS(res.text, 'html.parser') # 비어있는 태그들 삭제 [x.decompose() for x in soup.findAll(lambda tag: (not tag.contents or len(tag.get_text(strip=True))
02. 재고 크롤러(1) 크롤링 서비스이니 만큼, 주 기능은 크롤링이다. 책 재고를 긁어오기 위해 두 가지가 필요하다 생각했다. 책에 관한 정보 해당 책 재고 책에 관한 정보 책에 관한 정보를 처음에는 네이버 책 페이지에서 받아왔는데, 찾아보니 API가 있었다. API는 크롤링보다 빠르고 간단하다...ㅎㅎ 이에 대한 내용은 다음에 API에 관한 글을 적으면서 다룰 예정이다. 책 재고 크롤링 이번 글의 주제인 크롤링. 재고를 긁어오기 위해 교보문고에서 재고를 올리는 URL을 확인했다. 살펴보니 책의 isbn을 이용해 재고를 확인하는 jsp 페이지로 접속이 가능했다. 아래 링크에서 **isbn**이라고 적힌 곳에 책의 isbn을 입력하면 접속 가능하다. http://www.kyobobook.co.kr/prom/2013/general..
01. https://neung.pythonanywhere.com Where is the Book? 참고사항 개발 진행 중입니다. 아직 CSS는 입히지 않았습니다. 건의 사항은 neungyoung.kim@gmail.com으로 보내주시면 감사하겠습니다. neung.pythonanywhere.com 아직 미완이긴 하지만 우선 사이트 링크부터. 여태껏 공부했던 내용들을 복습하고, 재정비할 겸 정리글을 올려볼 생각이다. K와 스터디를 시작하면서 파이썬으로 크롤링 사이트를 하나 올리는 걸 첫 목표로 잡았다. 크롤링은 웹을 공부하기에 좋았고, 둘 다 파이썬의 웹 프레임워크인 보틀을 이용해 서비스를 올려본 적이 있어 접근하기도 덜 부담스러웠다. 주제선정 막상 만들려니 크롤링 사이트 주제를 정하는 것부터 문제였다. 실생활에 ..
교보문고 재고 확인 사이트 만들기 최근 친구 한 명과 가장 재미있게 하고 있는 것. 교보문고 재고 크롤러 만들기. 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..