내 잡다한 노트
html parser 크롤링 예제코드와 이론 본문
# 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 |