크롤링 기초 (1) : 기본 용법 / find, find_all, get_text, string
기초/Python2022. 1. 10. 21:39
import requests
# request를 하면 해당 웹사이트 서버에서 respond해주는 정보(HTML)을 해석해서 보여 주는 것
from bs4 import BeautifulSoup as b
res = requests.get('url')
soup = b(res.content,'html.parser')
print(soup)
> 파싱(parsing, parse) = 문자열을 쪼개서 의미를 분석하는 것
> 해당 파싱을 해 주는 클래스가 BeautifulSoup
> 파싱하는 방법도 다양한데, 그 중 가장 보편적으로 사용되는 것이 html.parser이다.
myp = soup.find('p') # 태그 이름이 p인 곳 중 맨 처음 찾는 것을 myp에 넣어 준다.
myp.get_text() # 그 곳의 텍스트를 가져옴
myp.string # get_text랑 같은 기능을 함
> soup.find()로 원하는 부분을 지정할 수 있다.
> 변수.get_text() 로 지정된 부분을 가져올 수 있다.
태그명이 동일한 여러 개의 항목이 존재할 경우, 다른 속성값으로 특정지어 선택할 수 있다.
data1 = soup.find('태그명', class_='클래스명')
data1 = soup.find('태그명','클래스명')
data2 = soup.find('태그명',attrs = {'속성명':'속성값'})
data3 = soup.find(id='id값')
마찬가지로, 해당 태그명을 가진 모든 것을 찾아올 수도 있다.
이 때는 find_all()을 사용하고, 결과는 리스트 형태로 저장되어 for문을 활용할 수 있다.
data_all = soup.find_all('p')
for datas in data_all:
print(datas.string)
태그 이름들이 다 비슷해서 특정지을 수 없을 때는?
1. 더 넓은 범위의 태그명을 우선 find()로 찾아 추출하고,
2. 그 추출한 결과에서 원하는 부분을 다시 추출할 수 있다.
∵ find()를 통해 찾은 데이터는 단순 문자열이 아닌 객체 형태로 반환됨!
import requests
from bs4 import BeautifulSoup as b
res = requests.get('url')
soup = b(res.content,'html.parser')
sector = soup.find('tag1', 'class1')
data = sector.find('tag2', 'class2')
# tag1과 class1을 갖는 범위 내에서 tag2와 class2를 갖는 데이터를 반환한다.
'기초 > Python' 카테고리의 다른 글
크롤링 기초 (2) : 기본 용법 / select (0) | 2022.01.11 |
---|---|
파이썬 기초(9) : 라이브러리 (0) | 2022.01.04 |
파이썬 기초(8) : 객체와 클래스 (0) | 2022.01.03 |
댓글()