본문 바로가기
데굴데굴 구르기

python으로 웹크롤링해서 검색 및 결과 가져오기

by 새싹감자 2022. 9. 12.

웹크롤링은 생각보다 간단하다!

아래 코드는 네이버에 강남구 아파트를 검색해 제일 먼저 나오는 아파트를 출력해주는 아주아주 간단한 코드이다.

하지만 이 코드를 활용하면 어떤 홈페이지든 어떤 결과든 모두 가져올 수 있게 만들 수 있다!

 

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
from bs4 import BeautifulSoup

우선 필요한 친구들을 import해준다.

설치가 안되어있는 라이브러리가 있다면 Terminal을 통해 install 해주도록 하자!

driver = webdriver.Firefox(executable_path="C:/driver/geckodriver.exe")
driver.wait = WebDriverWait(driver, 2)

드라이버를 실행시켜준다. 나는 Firefox를 설치한 후에 사용해주었다.

Firefox를 열어두고 시작하자!

URL1 = "https://www.naver.com/"
driver.get(URL1)
time.sleep(3)

나는 naver를 열거라 url에 네이버 주소를 써주었다. 자신이 열고 싶은 주소를 쓰자.

time.sleep()은 안넣으면 결과가 이상하게 출력될 수 있으니 꼭 넣어주도록 하자!

시간은 자신의 서버 시간에 맞춰 적당히 맞춰주면 된다.

 

 

 

오른쪽버튼->검사

 

 

검사창이 뜨면 자신이 원하는 부분에서 복사->XPath 를 하면

//*[@id="query"] 이런 형태의 아이디가 나온다.

driver.find_element_by_xpath('//*[@id="query"]').click()
driver.find_element_by_xpath('//*[@id="query"]').send_keys("강남구 아파트")
time.sleep(3)

클릭을 하고 싶으면 click()을 뒤에 붙여주고, 검색어를 넣고 싶다면 send_keys를 뒤에 붙여주면 된다.

driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]').click()

검색키를 클릭해준 후에

soup = BeautifulSoup(driver.page_source, "html.parser")
result = soup.find('a', class_='tit').text
print(result)

결과를 가져와주면 끝이다!

soup.find 안에 들어갈 부분은 화면마다 다르다. 나는 tit class안에 있는 a태그부분의 text를 가져왔다.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
from bs4 import BeautifulSoup

driver = webdriver.Firefox(executable_path="C:/driver/geckodriver.exe")
driver.wait = WebDriverWait(driver, 2)

URL1 = "https://www.naver.com/"
driver.get(URL1)
time.sleep(3)
driver.find_element_by_xpath('//*[@id="query"]').click()
driver.find_element_by_xpath('//*[@id="query"]').send_keys("강남구 아파트")
time.sleep(3)
driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]').click()
soup = BeautifulSoup(driver.page_source, "html.parser")
result = soup.find('a', class_='tit').text
print(result)

 

댓글