본문 바로가기

BLOG/웹크롤링

[웹크롤링] 크롤링한 데이터 메모장(텍스트 파일)에 저장하는 방법 크롤링한 데이터를 메모장과 같은 텍스트 파일에 저장하려면 sys library를 이용하면 되는데요, sys library에서 표준 출력 방향을 모니터가 아닌 다른 변수로 지정해주는 기능을 제공합니다. 즉, 모니터에 출력되는 것이 아니라 텍스트 파일에 저장해주고, 이를 다시 되돌려주기 위해 sys library를 사용하는 것입니다. 따라서 텍스트를 저장하기 전 다음과 같이 코드를 입력해 주어야 합니다. import sys orig_stdout = sys.stdout f = open(f_name, 'a', encoding='UTF-8') #f_name = 파일경로+파일이름.txt로 설정 필요 sys.stdout = f 두 번째 코드는 표준 출력 방향을 모니터가 아닌 다른 변수로 지정한다는 코드고, 세 번째 .. 더보기
[웹크롤링] 네이버 검색창에 검색어 입력하는 방법 (selenium) 네이버 홈페이지는 크롤링할 때 자주 사용되는 페이지 중 하나인데요, 네이버 홈페이지의 검색창에 원하는 텍스트를 입력한 뒤, 검색버튼을 누르는 코드에 대해서 살펴보도록 하겠습니다. 먼저, 네이버 홈페이지를 여는 코드를 작성하도록 하겠습니다. from bs4 import BeautifulSoup from selenium import webdriver import time path = "c:/temp/chromedriver_240/chromedriver.exe" #사용자 크롬드라이버경로 입력 driver = webdriver.Chrome(path) driver.get("http://naver.com") time.sleep(2) # 2초기달리기 필요한 라이브러리를 import 한 뒤, path 변수에 크롬드라이.. 더보기
[웹크롤링] 탭(tab) 변경 방법 여러 탭을 만들어서 동시에 크롤링을 수행하도록 할 수 있는데요, 만약 탭을 변경해야 한다면 코드를 어떻게 작성해야 할까요? 바로, swith_to.window() 라는 함수를 이용하면 되는데요, 아래 코드를 보면서 살펴보도록 하겠습니다. swith_to.window() 함수를 사용하기 앞서, 웹 드라이버 설정을 해주어야 하는데요, 아래와 같이 설정을 해주도록 하겠습니다. path = "c:/temp/chromedriver_240/chromedriver.exe" ###자신의 chomedriver의 경로 위치 driver = webdriver.Chrome(path) 웹드라이버를 'driver' 라는 변수에 저장해주었는데요, 각자 코드에 맞게 입력하시면 됩니다. 한편, swith_to.window() 함수는 .. 더보기
[웹크롤링] 페이지 맨 밑으로 스크롤 하는 방법 이전 글에서는 원하는 픽셀만큼 아래로 스크롤하는 방법에 대해서 살펴보았는데요, 이번에는 같은 함수 execute_script() 함수로 페이지 맨 밑으로 스크롤하는 방법에 대해서 알아보겠습니다. 먼저, 웹 드라이버는 아래와 같이 설정하도록 하겠습니다.(selenium, 크롬드라이버 사용한다는 가정하에 코드입니다.) path = "c:/temp/chromedriver_240/chromedriver.exe" ###자신의 chomedriver의 경로 위치 driver = webdriver.Chrome(path) 웹 드라이버를 'driver' 라는 변수에 저장해주었는데요, 각자 코드에 맞게 입력하시면 됩니다. 그리고나서, 페이지 맨 밑으로 스크롤을 하기 위해 다음과 같이 입력해주면 됩니다. driver.exec.. 더보기
[웹크롤링] 자동으로 스크롤 내려가게 하는 방법 예를 들어, 네이버 홈페이지에 키워드를 입력하고 관련 블로그 글들을 크롤링할 때, 딱 30개의 블로그만 처음에 보이는데요, 그 이후에 따로 스크롤을 내리지 않으면 30개까지만 크롤링을 하고 멈추게 됩니다. 따라서 만약 30개 이상의 글들을 크롤링하려면 스크롤을 중간 중간에 내리게 하는 코드를 입력해야 하는데요, 이를 도와주는 함수가 바로 execute_script() 합수입니다. 밑에 코드를 보면서 설명하도록 하겠습니다. - execute_script("window.scrollTo( );") : 스크롤하기 execute_Script("window.scrollTo( );") 함수는 해당 픽셀만큼 아래로 화면을 이동시키는 함수인데요, 만약 500픽셀만큼 아래로 이동하고 싶다면 execute_Script("w.. 더보기
[웹크롤링] 페이지 뒤로 가기 실행 코드 (selenium) 웹 크롤링을 할 때, 특정한 경우 페이지를 다시 뒤로 가야 하는 경우가 있을 수 있는데요, selenium 웹 드라이버를 이용하여 back() 함수를 사용하면 쉽게 뒤로 갈 수 있습니다. (selenium, 크롬 드라이버를 사용한다는 가정하에서 설명드리겠습니다.) 1. .back() : 이전 페이지로 돌아가기 back() 함수를 사용하기 앞서, 웹 드라이버 설정을 해주어야 하는데요, 아래와 같이 설정을 해주도록 하겠습니다. path = "c:/temp/chromedriver_240/chromedriver.exe" ###자신의 chomedriver의 경로 위치 driver = webdriver.Chrome(path) 웹드라이버를 'driver' 라는 변수에 저장해주었는데요, 각자 코드에 맞게 입력하시면 됩.. 더보기
[웹크롤링] 팝업창(얼럿창) 해결 방법 - try / except 웹 크롤링을 하다보면, 특정 페이지에 팝업창(또는 얼럿창)이 있을 수 있는데요, 이러한 팝업창을 닫아주는 코드가 없다면 입력한 코드가 실행되지 않는답니다. 따라서 팝업창을 닫아주는 코드를 입력해야 하는데요, 이는 try문을 이용해서 쉽게 해결할 수 있습니다. 만약 try문을 사용하지 않고 팝업창을 닫는 코드를 실행하면, 팝업창이 나오면 잘 실행이 되지만 팝업창이 다시 나오진 않을 때 에러가 나기 때문입니다. 따라서 try문에는 팝업창을 닫는 코드를, except문에는 에러가 났을 때의 코드를 입력해주면 됩니다. 팝업창을 닫는 코드는 다음과 같습니다. try : driver.find_element_by_xpath('XPath 경로').click() except : print("알림창이 없습니다") 두 번째.. 더보기
[웹크롤링] 자주 사용되는 select 함수 5가지 - 코드 입력 형식 select함수는 find() 함수와 find_all 함수와는 다르게 여러 기능들을 사용할 수 있는데요, 주로 사용되는 코드 입력 방식에 대해 설명드리도록 하겠습니다. 1. 태그 이름 먼저 첫 번째로, select 함수는 원하는 태그를 찾을 때 많이 사용됩니다. 태그 이름으로 요소를 찾을 때 아래와 같이 입력하면 됩니다. soup.select('태그 이름') 위 코드에서 soup 는 soup = BeautifulSoup(html, 'html.parser') 로 설정된 변수입니다. 한편, 태그를 찾기 위해서 select() 함수 안에 '태그 이름' 을 입력하면 해당 요소가 선택됩니다. 2. 클래스 이름 두 번째로, select() 함수를 이용하여 클래스 이름을 찾는 코드는 다음과 같습니다. soup.sel.. 더보기
[웹크롤링] 원하는 태그 찾기 + 텍스트 추출 - find 웹 크롤링을 할 때, 가장 많이 사용하는 함수 중 하나가 바로 find() 함수인데요, 아래 코드를 보면서 find() 함수에 대해 살펴보도록 하겠습니다. 1. find() : 태그 찾기 먼저, 아래와 같은 html이 있다고 가정해보겠습니다. html1=''' hello! ''' 위 html에서 만약 'hello!' 라는 텍스트를 찾고 싶을 때, 이 텍스트가 있는 태그를 알아야 하는데요, 해당 텍스트는 태그에 있는 것을 알 수 있습니다. 이제 이 텍스트를 찾기 위해 find() 함수를 사용하면 되는데요, find 함수 안에 해당 태그 명을 입력하면 됩니다. soup = BeautifulSoup(html1, 'html.parser') #html.parser는 html 분석 도구 soup.find('div'.. 더보기
[웹크롤링] 특정 element 접근하는 코드 6가지 + 클릭하는 방법 웹크롤링을 할 때, 특정 버튼을 클릭하거나 특정 element에 접근할 때 사용할 수 있는 방법이 크게 6가지가 있는데요, 하나씩 살펴보도록 하겠습니다. - find_element_by_ : 특정 element에 접근하기 특정 element에 접근하기 위한 방법으로 'html name', 'id name', 'xpath', 'css', 'class name', 'tag name'을 사용하는 방법이 있는데요, 특정 element에 접근하는 코드인 find_element_by_ 와 결합해 사용하면 됩니다. 결합한 코드는 다음과 같습니다. 1. html name 사용 find_element_by_name('html name') 2. id name 사용 find_element_by_id("html id name.. 더보기