ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] Beautifulsoup 를 이용한 웹페이지 크롤링
    #파이썬 2020. 3. 25. 19:54

    BeautifulSoup는 웹페이지 크롤러중 가장 보편적으로 사용되는 html, xml을 파싱하는 파이썬 모듈이다. 설치방법을 간단하게 소개하고, 개인적으로 자주 사용하는 함수들을 정리해본다.

    # Python2
    pip install beautifulsoup4
    
    # Python3
    pip3 install beautifulsoup4
    
    # Optional
    pip install lxml
    pip3 install lxml

    설치는 간단하게 pip를 이용해서 설치하면 되며, lxml 모듈은 선택사항이다. bs4 모듈에 html parser는 내장되어있지만, lxml 의 속도가 더 빠르다고 하니, 참고해서 사용하면 되겠다. 사용법은 같다.

    import requests
    from bs4 import BeautifulSoup
    
    res = requests.get('URL')
    html = res.text
    '''
    f = open('test.html','r')
    html = f.read()
    '''
    soup = BeautifulSoup(html,'lxml') # BeautifulSoup(html,'html.parser')
    

    여기까지가 기본적인 형태로, html 코드를 웹으로 받든, 파일 입출력으로 열든해서 BeautifulSoup에 넣어주면, 준비가 끝난다. 

    # input 태그 가져오기
    # html 에서 제일 처음 나오는 태그만 가져옴
    result = soup.find('input')
    
    # name 속성이 id 인 input 태그 가져오기
    result = soup.find('input',{'name':'id'})
    
    # type 속성이 hidden 인 input 태그의 value 속성 가져오기
    result = soup.find('input',{'name':'hidden'}).get('value')
    
    # p 태그 사이 내용 가지오기
    # ex) <p> Hello World! </p> -> result = "Hello World!"
    result = soup.find('p').text
    
    # html 내의 모든 태그 다 가져오기
    # 해당 태그가 리스트 형태로 반환됨
    result = soup.find_all('input')
    
    ex) 모든 form 태그 가져오기
    for f in soup.find_all('form'):
    	# 해당 form 태그 하위의 name 속성이 test 인 input 태그 가져오기
    	inp_tag = f.find('input',{'name':'test'})
    
    # 가져온 태그에 옵션 존재 여부 확인하기
    for form in soup.find_all('form'):
    	# has_attr 함수로 옵션 유무 확인
    	if form.has_attr('action'):
        		print('This form has action option!')
        		# 옵션 값 가져오기
            	print('action : "+form.get('action')
    

    매번 간단하게만 사용하는지라 find함수와 find_all, has_attr 함수 정도만 알면, 어지간한 크롤링은 됐던 것 같다. 추후 자주 사용하게되는 함수가 있으면, 업데이트 할 예정이다.

    댓글 0

Designed by Tistory.