파일로 저장된 html 파일을 읽을 때 사용한다.
상세한 내용을 알고 싶다면 🔗Beautiful Soup 공식 문서에서 더 많은 정보를 확인할 수 있다.
- open : 파일명과 함께 읽기(r) / 쓰기(w) 속성 지정 가능
- html.parser : Beautiful Soup의 html을 읽는 엔진 중 하나(lxml도 많이 사용)
- prettify() : html 출력을 이쁘게 만들어주는 기능
conda install -c anaconda beautifulsoup4 pip install beautifulsoup4
- <head> tag
soup.head
- <body> tag
soup.body
- <p> tag
- 처음 발견한 <p> tag만 출력soup.p # 또는 soup.find("p")
- python 예약어를 통해 Tag 확인
- python 예약어 : class, id, def, list, str, int ,tuple...
- 단일 조건
soup.find("태그명", class_="class명")
soup.find("태그명", {"class":"class명"}).text.strip()
- 다중 조건
soup.find("태그명", {"class":"class명", "id":"id명"})
- tag 여러 개 반환
일반적으로 HTML내에서 속성 id는 딱 한 번만 나타나므로 find_all()함수는 의미가 없는 경우가 많다. 그러나 find_all() 함수는 list를 반환하므로, 검색 결과를 list로 받고 싶다면 id라도 find_all()함수를 사용한다.soup.find_all("태그명")
idx에는 확인하고자 하는 tag가 몇 번째 요소인지 숫자를 입력하면 된다.
soup.find_all(id="id명)[idx].text
soup.find_all("태그명", class_="class명")
print(soup.find_all("태그명")[idx].text) print(soup.find_all("태그명")[idx].string) print(soup.find_all("태그명")[idx].get_text())
- <p> tag 리스트에서 텍스트 속성만 출력
for each_tag in soup.find_all("p"): print("=" * 50) print(each_tag.text)
- <a> tag에서 href 속성 값에 있는 값 추출
links = soup.find_all("a") links[0].get("href"), links[1]["href"] # 또는 for each in links: href = each.get("href") # each["href"] text = each.get_text() print(text + "=>" + href)
- 접근할 Web 주소를 알 수 없을 때
- JavaScript를 사용하는 Web page의 경우
- Web browser로 접근하지 않으면 안 될 때
* 이 글은 제로베이스 데이터 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.