Home > PYTHON > Library > bs4 & selenium

bs4 & selenium
python library bs4 selenium

requests #


python에서 가장 원형적인 파싱의 방법

import requests
import json

data = requests.get("https://jsonplaceholder.typicode.com/comments")
data = json.loads(data.text)

bs4 #


html과 같은 정적인 페이지에서 데이터를 분류하기 위한 라이브러리

import #


from bs4 import BeautifulSoup

request from homepage #


홈페이지에서 데이터가져오기

request_data = requests.get("https://naver.com")

html parsing #


가져온 데이터 html형태로 파싱하기

soup = BeautifulSoup(request_data.text,'html.parser')

select from parsing data #


  • 파싱한 데이터에서 title 태그의 값들 가져오기
result = soup.select('title')[0].text
  • tag1에 속한 자손(tag2) 가져오기
result = soup.select("tag1 tag2").text
  • tag1에 속한 자식(직계 tag2) 가져오기
result = soup.select("tag1 > tag2").text
  • class1 가져오기
result = soup.select(".class1").text
  • id1 가져오기
result = soup.select("#id1").text
  • tag1에 href 속성을 가진것 가져오기
result = soup.select("tag1[href]").text
  • tag1 태그요소 중 <num>번째 요소 선택
result = soup.select("tag1:nth-child(<num>)").text
  • 파싱한 데이터에서 title 태그의 첫번째 텍스트 가져오기
result = soup.select_one('title').text

홈페이지에서 크롤링을 막을때 홈페이지 접근이 정상적인것 처럼할때 넣는다.

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
data = requests.get("https://jsonplaceholder.typicode.com/comments", headers=headers)

selenium #


js와 같이 동적인 기능이 활용된 페이지에서 데이터를 분류하기 위한 라이브러리
(지도와 같이 변동성이 클경우 사용)

import #


# 가장 원형의 드라이버를 가져온다
from selenium import webdriver
# 셀레니움 4에서 문법이 변경되면서 selector등을 사용할때 사용
from selenium.webdriver.common.by import By
# 키보드로 값을 넣을때 사용
from selenium.webdriver.common.keys import Keys
# 로딩중일때 어떠한 요소가 나올때까지 대기 가능하게 함
from selenium.webdriver.support.ui import WebDriverWait
# 로딩중일때 except문을 작성하기 위해 필요함
from selenium.webdriver.support import expected_conditions as EC

driver handling #


  • 크롬을 이용하여 드라이버를 구동한다.
driver = webdriver.Chrome()
  • 드라이버를 이용해서 주소에 접속한다.
driver.get(<url>)
  • 해당 페이지를 전부 불러온다.(string type)
  <raw_source> = driver.page_source
  • <css_selector>에 해당하는 첫 요소를 가져온다.
  <element> = driver.find_element(By.CSS_SELECTOR, value=<css_selector>)
  • <css_selector>에 해당하는 요소들을 가져온다.
  <elements> = driver.find_elements(By.CSS_SELECTOR, value=<css_selector>)
  • 해당하는 요소들을 클릭한다.
  <element>.click()
  • 드라이버를 종료시킨다.
driver.quit()

WebDriverWait #


홈페이지가 로딩이 될때까지 기다리기 위한 구문

  • <time>을 최대 대기 시간으로 하여 <css_selector>가 식별될때까지 기다린다.
WebDriverWait(driver, <time>).until(EC.presence_of_element_located((By.CSS_SELECTOR, <css_selector>)))