내 잡다한 노트

html parser 크롤링 예제코드와 이론 본문

크롤링

html parser 크롤링 예제코드와 이론

peanutwalnut 2022. 5. 28. 19:10

# find 함수를 사용

 

import requests

from bs4 import BeautifulSoup

res = requests.get('크롤링할 사이트 url')

soup = BeautifulSoup(res.content, 'html.parser')

 

section = soup.find('ul', id='dev_course_list')

titles = section.find_all('li', 'course')

for index, title in enumerate(titles):

    print(index+1, title.get_text().split('[')[0].split('-')[1].strip())

 

예시 코드.

requests 모듈은 사이트의 정보를 가져오는 것

 

find()의 인자로 html 태그들을 넣어 해당하는 태그들 중 첫번째 값을 리턴하게 된다.

해당하는 태그들을다 가져오고 싶다면 find_all을 사용하자

보통 인자로 태그를 주지만 class 속성도 가져올 때가 많다.

그때는 find('a', 'nav_item') 이렇게 뒤에 써주면 된다. class 속성이 쓸 때가 많다보니

위에 id=' '처럼 굳이 적지않고 바로 적어도 된다.

위에 코드는 find로 한번 찾고 find_all로 다시 한번 추출하는 과정을 거쳤다

그리고 split과 strip 함수를 통해 데이터 전처리 과정을 거쳤다.

 

# css select를 사용

 

import requests

from bs4 import BeautifulSoup

res = requests.get('크롤링할 사이트 url')

soup = BeautifulSoup(res.content, 'html.parser')

 

titles = soup.select('li')

for index, title in enumerate(titles):

    print(index+1, title.get_text()

 

이러면 li  태그를 다 찾아서 리스트로 반환한다.

좀 더 범위를 좁히고 싶다면

titles = soup.select(body h3 li) 이렇게 body 태그 안에 h3 태그 안에 li 태그의 내용을 찾아 반환한다.

스페이스를 한칸씩 띄워야하는데 이게 하위 관계를 나타낸다.

스페이스대신 > 를 쓴다면 바로 밑의 하위 관계에 있는 태그만을 찾아 반환한다.

스페이스는 바로 밑 그런거 아니고 그냥 하위관계에 있기만 하면 찾아 반환한다.

 

class나 id로 찾고 싶다면

class로 찾을 때는 인자로 .class이름

id로 찾고 싶을 때는 #id이름

css파일에서 디자인 설정할때랑 같음.

 

# select_one

select_one은 문서의 처음부터 찾게 되며 가장 먼저 있는 것을 리턴한다.

또, data.text나 data['href']로 태그의 속성을 접근할 수 있다.

data.text는 <a class="click" href="naver.com"> 네이버링크 </a> 에서 네이버링크를 접근한다.

 

 

복합 예제

items = soup.select('ul#hobby_couse_list li.course.paid')

ul태그이고 id값이 hobby_course_list가 상위관계고

밑에 li 태그이고 class값이 course paid 인 값을 찾는다 라는 의미이다.

class가 course paid 처럼 띄어써져있다면 .을 붙여서 잇자

 

select는 여러개를 가져오는 거고 select_one은 하나만 가져오는 함수다.

'크롤링' 카테고리의 다른 글

크롤링해서 엑셀 파일로 만들기  (0) 2022.05.31
정규표현식 (regex)  (0) 2022.05.30
데이터 포맷(XML, JSON, CSV)  (0) 2022.05.30
파이썬 문자열 함수 정리  (0) 2022.05.30