" Park 기술 블로그 "
# 카테고리
# 도구
[Python Crawling] 라이브러리 정리
2021-11-21 18:38:17

파이썬으로 웹 크롤러 만들었을 때 사용했던 라이브러리 정리

  • requests : 웹 페이지 요청 모듈
  • selenium : JavaScript로 인해 정상적인 웹 페이지를 가져오지 못할 경우 브라우징 탐색을 통해 크롤링할 때 사용한 모듈
  • beautifulsoup4 : HTML을 파이썬에서 사용할 수 있는 인스턴스로 변환하는 모듈
  • lxml : xml parser 모듈

 

◼︎ requests

import requests as rq
url = "http://smparkworld.com/blog/1"
res = rq.get(url)     // GET request
res = rq.post(url)    // POST request

print(res) // 응답 객체
print(res.status_code) // 응답코드
print(res.headers) // 헤더 정보
print(res.cookies) // 쿠키 정보
print(res.encoding) // 페이지 인코딩 확인
print(res.text) // 응답 데이터(html, json)를 문자열 형태로 출력
print(res.content) // 응답 데이터를 바이너리 형태로 출력하기
print(res.json()) // 응답 데이터를 인스턴스 형태로 가져오기

위에서 res.text를 사용할 때는 응답 데이터 형식이 html이냐 json이냐에 따라서 내부적으로 res.content를 호출해서 리턴하냐, res.json()를 호출해서 리턴하냐로 나뉜다.

 

◼︎ selenium

from selenium import webdriver  // selenium 중 webdrvier 가져오기
dr = webdriver.Chrome('./chromedriver.exe’)
dr.get('https://www.naver.com/')

 selenium을 설정하는 방법은 아래와 같다.

  1. 크롬 주소창에 Chrome://version 검색 후 맨 위의 버전 정보 확인
  2. https://chromedriver.storage.googleapis.com/index.html 에서 맞는 버전 디렉토리에 들어간 다음 os에 맞게 chromedriver 다운로드
  3. 압축 해제 후 파이썬 설치 bin 디렉토리로 이동한다. (mac기준 echo $PATH로 경로 확인 -> mv chromedriver /usr/local/bin 으로 이동)

 

◼︎ BeautifulSoup w/ lxml

import requests as rq
from bs4 import BeautifulSoup
url='http://www.pythonscraping.com/pages/page1.html'
res=rq.get(url)
if res.status_code==200:
    html = res.text
    bs = BeautifulSoup(html,'html.parser')  // 두 번째 인수로 'html.parser' 대신 'lxml'과 같이 다른 모듈을 사용할 수도 있음.
    print(bs)
    print(bs.prettify())
else:
    print(res.status_code)

 

주요 사용 함수 정리

  • select(String) : css의 selector를 인수로 전달하면 맞는 태그를 가져오고, 리스트 형태로 가져온다.
    • find(String) : tag이름을 전달하면 해당 태그를 가져온다. 최초에 발견한 태그만 가져온다.
    • find_all(String) : tag이름을 전달하면 해당 태그를 가져온다. 모든 태그를 가져오고 리스트 형태로 가져온다.
      • find_all(String, Attribute) : find_all('p', align = 'center')와 같이 특정 태그에 설정된 attribute를 필터링해서 가져온다.
      • find_all(String, Limit) : find_all('p', limit = 2)와 같이 특정 모든 태그 중 2개만 가져오도록 필터링한다.
    • get_text(Option)
      • find('body').get_text()와 같이 사용하면 해당 body 태그 안에 있는 모든 문자열을 종합한다. \n 포함해서 리턴한다.
      • find('body').get_text(strip = True)와 같이 사용하면 해당 body 태그 안에 있는 모든 문자열을 종합한다. \n를 제거해서 리턴한다.
      • find('body').get_text('-', strip = True)와 같이 사용하면 해당 body 태그 안에 있는 모든 문자열을 종합한다. \n를 -로 치환해서 리턴한다.
    • extract(): find('body').extract()와 같이 사용하면 body태그를 삭제한다.

    위의 함수를 사용하면 태그가 리턴되고 해당 태그 안에도 태그가 있으므로 .find().find() 이러한 형태로 접근 가능함.

 

0
# 댓글 + 새 댓글 작성
# 새 댓글 작성
댓글 암호는 댓글 삭제 시 필요합니다.
# 님에게 답변 작성
대댓글 암호는 댓글 삭제 시 필요합니다.
# 님의 댓글 삭제
댓글 작성 시 입력했던 암호를 입력해주세요.
아직 댓글이 없습니다