BeautifulSoup 활용

Jinny·2021년 7월 2일
0
post-thumbnail

BeautifulSoup 라이브러리를 사용한 예제를 통해 여러 웹 사이트를 크롤링 해보겠습니다.
BeautifulSoup는 html요소에 접근할 수 있도록 도와줍니다.

웹 사이트 순위

Alexa(https://www.alexa.com/topsites)에서는 웹 사이트의 순위를 조회 할 수 있습니다. 다양한 필터를 통해 원하는 웹 사이트 순위를 볼 수 있는데 대표적으로 글로벌 웹 사이트 순위, 한국 웹 사이트 순위 정보를 크롤링해서 출력해보겠습니다.

글로벌 웹 사이트 순위

글로벌 웹 사이트 50위 까지는 무료로 조회가 가능합니다.

위 사진을 보면 순위 별로 "Site, Daily Time on Site, Daily Pageviews per Visitor, % of Traffic From Search, Total Sites Linking In"정보가 제공됩니다.

먼저 필요한 라이브러리들을 import하고 기본 설정 및 데이터프레임 생성을 합니다.

원하는 정보를 조회하기 위해서는 해당 사이트의 html문서가 어떤 식으로 구성돼있는지 알아야합니다.
Chrome으로 웹 사이트를 열고 가져오고자 하는 정보에 마우스 오른쪽 클릭 -> 검사를 누르면 아래 사진과 같이 해당 부분의 html문서를 볼 수 있습니다.

각 순위마다

로 감싸져있습니다. find_all을 해당 태그를 포함해 아래에 있는 html을 리스트 형태로 가져올 수 있습니다.

find_all의 첫 번째 속성에는 태그명을, 두 번째 속성에는 해당 태그의 속성을 넣어줍니다.
그 후 리스트를 반복하면서 순위 별로 정보를 추출하면 됩니다.

위 사진에서 사이트 이름은 p > a태그에, 나머지 정보들은 div.td right > p태그에 각각 담겨있는 것을 확인할 수 있습니다.

먼저 사이트 이름을 .select()를 통해 추출합니다.

.select()는 css selcetor와 같은 방식으로 동작하고 결과를 리스트형태로 저장합니다. .select('p > a')와 .select('p a')는 같은 동작입니다. 또한 태그사이의 text만을 가져오기 위해서는 .get_text()를 붙여줘야 합니다.

다음으로 find_all을 사용하여

를 포함한 하위 태그정보를 리스트 형태로 저장합니다.

아래와 같이 리스트에 정보가 저장된 것을 확인할 수 있습니다.

리스트의 정보를 데이터 프레임에 저장하고 인덱스를 증가시킵니다.

이 때도 text를 가져오기 위해 .get_text()를 사용합니다.
데이터프레임을 출력하면 아래와 같이 나옵니다.

아래는 전체 코드입니다.

한국 웹 사이트 순위

한국 웹 사이트 순위도 앞선 예제와 형식이 완전히 동일하기 때문에 추가 설명없이 코드만 보겠습니다. url만 변경해주면 됩니다.

음악 순위

Bugs TOP 100

음악 순위를 크롤링하기 위해 Bugs 웹 사이트를 이용해보겠습니다.

필요한 라이브러리들을 import하고 음원 차트 url을 열고 BeautifulSoup으로 파싱합니다.

Bugs 음원 차트에서는 순위 별로 곡, 아티스트, 앨범 정보를 제공합니다.
각 부분의 html이 어떻게 구성돼 있는지 확인해봅시다.

순위 별 정보가 table > tbody > tr태그에 담겨있는것을 확인할 수 있습니다. 해당 tr태그를 모두 가져와서 길이를 출력해봅시다.

100개의 곡 정보가 이상없이 리스트에 담겼습니다.

반복문을 통해 리스트를 순회하면서 정보를 추출해봅시다.

노래의 제목은 p.title > a태그에 담겨있습니다.

아티스트 이름은 p.artist > a태그에 담겨있습니다.

앨범명은 td.left > a.album태그에 담겨있습니다.
이를 바탕으로 코드를 작성해봅시다.


잘 동작하는 것처럼 보입니다만 한 가지 부족한 점이 있습니다.
아티스트가 여러 명인 경우 한 명만 대표적으로 출력된다는 점 입니다.


두 명 이상이 참여한 곡의 아티스트명 화살표를 눌러보면 숨겨진 다른 아티스트가 나옵니다.

하지만 작성한 코드에서는 대표로 한 명의 아티스트만 출력됩니다.
여러 명이 모두 출력되도록 코드를 수정해봅시다.

아티스트가 두 명 이상인 부분의 html코드를 살펴봅시다.

p.artist 아래에 두 개의 a태그가 있고 두 번째 a태그의 onclick속성에 모든 아티스트가 작성된 것을 확인할 수 있습니다.


아티스트가 모두 추출됐습니다.

아래는 전체 코드입니다.

profile
AI, 데이터 사이언스 공부

0개의 댓글