반응형
크롤링할 URL과 기본 셋팅
import requests
from bs4 import BeautifulSoup as bs
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main'
res = requests.get(url,headers=headers)
soup = bs(res.content, 'html.parser')
크롤링 대상
위 대상을 find_all로 찾아보자
1순위부터 후순위 전부 div.item_box라는 동일한 태그에 존재한다.
반복되는 태그에 속해있기에 find_all을 적용한다.
mydata = soup.find_all('div','item_box')
find_all함수의 특징
find_all로 불러온 자료들은 get_text(), split() 적용이 안된다.
하지만 반복문을 통해 불러온 find_all 자료들은 find 사용 변수와 동일한 타입이 되므로 get_text(), split() 적용이 가능하다.
- find_all 함수 타입 : bs4.element.ResultSet
- find 함수 타입 : bs4.element.Tag
- for 반복문 변환 타입 : bs4.element.Tag
- 참고로 Nonetype은 반복문 적용이 불가하다.
- split()을 쓰면 리스트형태로 변환
for item in mydata :
print(item.get_text().split('\n'))
동일 대상을 find로 찾아보자
find를 적용하려면
먼저 각 순위하나하나가 아닌, 모든 순위들이 들어있는 객체,태그를 뽑아야한다.
find_data = soup.find('div','list_group')
그럼 이제 내부에 있는 각 순위들을 어떻게 뽑을 수 있을까?
먼저 find함수의 특징을 살펴보자
find함수의 특징
- 이 타입에는 split(), get_text() 적용가능
- 내부에 find_all함수 적용 가능
find함수를 적용한 mydata2에 find_all함수를 적용하자.
대상 태그는 다음과 같다.
우린 하단의 2가지 태그 중 li.ranking.item을 적용할 것이다.
그 이유는 추후 설명
mydata2 = find_data.find_all('li','ranking_item')
mydata2를 출력해서 형태를 보자
1,진달래,가수진달래 가 각태그(줄바꿈)별로 존재한다.
즉, 줄바꿈 \n을 통해 리스트를 만들도록 하자
반복문 적용하기
- 여기서 추가할 조건들
- 각 출력문들을 띄워주고
- 빈칸을 없애주자
for item in mydata2 :
new = item.get_text().split('\n') # 띄워쓰기를 기준으로 분류
print(new[2]+"위 :",new[4], "\n관련 검색어 :", new[6].strip())
출력결과
find_all에서 li.ranking_item이 아닌 div.item_box를 적용했다면?
앞에서 find_all을 적용할 때
위가 아닌 밑의 태그를 선택했을 때, 반복문을 실행시키면 다음과 같은 오류가 발생한다.
연관검색어만 추출하기
앞서 배운것처럼
1. find함수적용
2. find_all함수적용으로 2중추출하기
를 적용해도 되고
find_all함수만 적용해도 나온다.
지금은 find_all함수만으로 뽑아보자
reldata = soup.find_all('span','item_title_sub')
for item in reldata :
print(item.get_text())
반응형
'● 크롤링, 자동화 > BeautifulSoup' 카테고리의 다른 글
2차원 리스트를 1차원 리스트로 바꾸자 (0) | 2021.02.01 |
---|---|
[잔재미코딩] [오류/해결] ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end (0) | 2021.02.01 |
[나도코딩] 파이썬 코딩 무료 강의 (활용편3) - 웹 크롤링? 웹 스크래핑! 4. find_all, for 문 (0) | 2020.08.29 |
[나도코딩] 파이썬 코딩 무료 강의 (활용편3) - 웹 크롤링? 웹 스크래핑! 3 : attrs, find, class, sibling, siblings (0) | 2020.08.28 |
[나도코딩] 파이썬 코딩 무료 강의 (활용편3) - 웹 크롤링? 웹 스크래핑! 2 : User Agent (0) | 2020.08.27 |