크롤링 기초 (1) : 기본 용법 / find, find_all, get_text, string

기초/Python|2022. 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

댓글()