Python

[Python] CRAWLING - BeautifulSoup

SangRok Jung 2022. 9. 13. 22:20
반응형

 

CRAWLING


  • 웹 페이지에서 필요한 데이터를 추출해내는 작업.
  • CRAWLING을 하는 프로그램을 Crawler라고 한다.

 

 

 

 

 

 

 

BeautifulSoup


  • HTML파일을 BeautifulSoup객체로 만들 수 있다
  • 변수 이름은 관습적으로 soup이라고 한다.
  • html.parser는 BeautifulSoup객체에게 HTML을 분석하라고 지시하는 의미를 가지고 있다.
  • html.parser는 파이썬 내장 클래스로 별도로 작성하지 않으면 자동으로 작동된다.

 

 

# 현재 페이지의 html 코드를 full_html에 저장한다.
full_html = driver.page_source
soup = BeautifulSoup(full_html, "html.parser")

 

 

 index.html이라는 html파일로 BeautifulSoup 객체를 만들어준다.
soup = BeautifulSoup(open("index.html"), "html.parser")

 

 

 

 

 

 

 

태그 추출하기

 

soup.find()


  • 태그를 이용하여 원하는 부분을 추출합니다.
  • 처음 등장하는 태그가 적용됩니다.
  • 태그의 name, attribut, value를 특정하여 찾을 수 있습니다.

 

 

▶ class_ 

  • 매개변수에 값을 지정함으로써 특정 클래스를 가진 태그를 추출 할 수 있다.
  • class라는 단어가 이미 사용되기 때문에 class뒤에 _를 붙여서 사용해야한다.

 

 

▶ get_text()

  • BeautifulSoup 객체의 태그안의 텍스트만 추출한다.

 

 

tag = "<p class='example' id='test01'> Hello World! </p>" 
soup = BeautifulSoup(tag) 

# 태그 이름만 특정 
soup.find('p') 

# 태그 속성만 특정 
soup.find(class_='example') 
soup.find(attrs = {'class':'exmaple'}) 

# 태그 이름과 속성 모두 특정 
soup.find('p', class_='example')

# 연속사용
# div태그의 title클래스 안의 p태그를 추출
soup.find("div", class_="title").find("p")

 

 

 

 

 

 

soup.find_all()


  • 태그를 이용하여 원하는 부분을 추출합니다.
  • 모든 태그가 적용됩니다.
  • 태그의 name, attribut, value를 특정하여 찾을 수 있습니다.
soup.find_all("p")

 

 

 

 

 

 

soup.select()


CSS Selector로 tag객체를 찾아서 반환합니다.

특정 경로의 태그를 반환할 때 유리 합니다.

 

 

#태그 찾기
soup.select("title")

#특정 태그 아래에 있는 태그 찾기
soup.select("div a") #div 태그 아래에 있는 a 태그 찾기

#특정 태그 바로 아래에 있는 태그 찾기
soup.select("head > title")
soup.select("head > #link1") #아이디로 태그 찾음
soup.select("div[class='service'] > p")
soup.select("p[class='tag_type'] > sapn")

#태그들의 형제 태그 찾기
soup.select("#link1 ~ .sister")
soup.select("#link1 + .sister")

#CSS class로 태그 찾기
soup.select(".sister")

#ID값으로 태그 찾기
soup.select("#link1")

 

 

 

 

 

 

 

 

soup.select_one()


타겟한 태그들 중 가장 첫번째 값을 반환합니다.

 

 

#brother class를 가진 태그들 중에 첫 번째 값만 추출할 때
print(soup.select_one(".brother"))
>> <a class="brother" href="http://example.com/elsie" id="link1">john</a>

 

반응형

'Python' 카테고리의 다른 글

[Python] Anaconda 가상환경 생성  (0) 2022.09.21
[Python] CRAWLING - Element Access  (0) 2022.09.16
[python] WEB CRAWLING  (1) 2022.09.08
[python] Module  (0) 2022.09.06
[python] Package  (0) 2022.09.06