Python과 Beautiful Soup로 웹 스크래핑
python 라이브러리 중 하나로, 스크래핑에 특화된 모듈인 beautifulsoup4에 대해서 알아보려고 합니다.
사용하는 python 버전은 3.7.1 입니다.
기본 사용법
-
BeautifulSoup 오브젝트 생성
웹사이트 URL에서 스크래핑을 하고자 하는 경우에는 requests를 이용합니다.
import requests from bs4 import BeautifulSoup url = "https://www.mansion-review.jp/shinchiku/prefecture/34.html" res = requests.get(url) res.encoding = res.apparent_encoding bs = BeautifulSoup(res.text, "html.parser")
위의 코드는 url에서 취득한 문서를 html로 파싱한 오브젝트를 bs에 할당한 것입니다.
-
간단한 html태그 취득 방법
find_all 메소드를 사용해서 HTML에서 A태그 전체를 취득합니다.
bs.find_all("a")
find_all로 취득한 오브젝트 <class ‘bs4.element.ResultSet’> 는 list처럼 취급할 수 있습니다.
태그 전체가 아닌 첫번째 요소만을 취득하기 위해서는 find를 사용할 수 있습니다.
bs.find("a") bs.a
태그가 HTML에 존재하지 않는 경우에는 None이 리턴됩니다.
-
취득한 태그 정보
취득한 태그의 속성 획득하기
bs.a.get("href")
취득한 태그의 문자열 획득하기
bs.a.string
-
조건을 추가해서 태그 정보 취득
<a href="/link" class="link">
와 같은 class가 link고 href가 /link인 a 태그 취득하기bs.find_all("a", class_="link", href="/link") # class_ 주의 bs.find_all("a", attrs={"class": "link", "href": "/link"}) bs.find_all(attrs={"class": "link", "href": "/link"})
-
css 셀렉터를 이용해서 태그 취득
find_all 대신에 select를 사용하면 css셀렉터를 사용해서 태그를 취득할 수 있습니다.
bs.select("#link1") bs.select('a[href^="http://"]')
-
태그 속성 편집
태그에 속성 추가하기
a = bs.find("a") a["target"] = "_blank"
html 태그 제거하기
html = ''' <div> <a href="/link">spam</a> </div> ''' bs = BeautifulSoup(html) bs.div.a.unwrap() bs.div # 결과 : <div>spam</div>
반대로 새로운 태그를 생성하기 위해서는 wrap 함수를 사용하면 됩니다.
python scraping에 관한 포스트 모음 : Tags - Scraping
Written on May 22, 2019