본문 바로가기
멋쟁이 사자처럼/Codelion

[코드라이언 / 같이 푸는 PYTHON] 실시간 검색어 확인하기

by 까다로운오리 2022. 1. 9.

강의 내용을 직접 정리한 자료 입니다.

 

https://shaded-xylocarp-541.notion.site/d1c9bfea4cdd496c9e95156412165e6f

 

크롤링

Crawler? Crawling?

shaded-xylocarp-541.notion.site

노션으로 먼저 정리하고.. 티스토리에 올리기..!

 

 

Crawler? Crawling?

crawler?
  1. 기는 것
  2. 파충류

—> 컴퓨터 언어로 번역하면, 웹사이트를 기어다니면서 데이터를 모아주는 도구

💡 **우리가 원하는 정보를 찾고 싶을 때 무한한 정보 속에서 찾을 때 우리는 크롤링을 사용한다.**

 

 

 

 


 

모듈

 

 


 

Requests

reguests 모듈의 get함수는 서버에 요청을 하는 함수이다.

https://docs.python-requests.org/en/master/api/

 

1. print(requests.get(url))

→ 응답상태를 print한다.

 

 

2. print(requests.get(url).text)

→ html 코드를 모두 가져온다.

✅ 여기서 변수 response는 requests로 응답 값을 받아서 내용물을 채워주는 통과 같은 존재인데, 이 통에는 text말고 많은 값들이 있다.
print(response.url)
#url : 응답으로 받아오는 HTML 태그의 a태그에서 url 값을 가져옵니다.

print(response.content)
#content : 텍스트 기능과 비슷하지만 약간의 차이가 있다면 텍스트는 유니코드 값을, 컨텐츠는 바이트 값을 가져오는 것을 알 수 있습니다.

print(response.encoding)
#encoding : en-이라는 단어 자체가 어디에서 “속하다”인데 데이터가 담긴 할당공간(박스)의 번호정도로 추측해 보았습니다.

print(response.headers)
#headers : HTML의 header라는 곳의 정보를 가져오는 응답 값 메소드입니다.

print(response.json)
#json : 딕셔너리와 비슷한 형태의 웹 통신에 사용되는 자료 구조라 생각하면 될 것 같습니다.

print(response.links)
#links : header에 있는 link 태그 값을 가져옵니다.

print(response.ok)
#ok : 서버에서 응답을 잘 처리했을 때 반환하는 값입니다.

print(response.status_code)
#status_code : 응답이 속하는 현황을 보여주는 번호로 200, 300, 400 등 다양한 번호가 있습니다.

Beautiful soup

Beautiful soup는 우리가 가져온 데이터로 의미있는 데이터로 변경하게끔 도와주는 기능을 하는 bs4라는 모듈 안에 있는 함수이다. 즉, 어떤 통에다가 정보를 담아주고 문자열 데이터를 하나하나 가지런히 정리해주는 기능이다.
print(response.text)
print(BeautifulSoup(response.text, 'html.parser'))

이 둘을 print하면 똑같지만 type을 확인하면 아래와 같이 나온다.

 

이는 원래 문자열 타입이었던것을 다른 타입으로 변환해준것을 의미한다.

BeautifulSoup(response.text, 'html.parser'))
parser?
우리의 문서, 데이터를 의미있게 변경하는방법을 말하며 parsing을 도와주는 프로그램을 뜻한다.

 

 


 

실시간 검색어 가져오기

 

BeautifulSoup의 몇가지 기능들을 살펴보면 다음과 같다.

soup = BeautifulSoup(response.text, 'html.parser')

print(soup.title)
print(soup.title.string)
print(sopup.tiltle.span)
print(soup.findAll('span')) #모든 span태그를 가져온다.

 

 

from bs4 import BeautifulSoup
import requests

url = "http://www.daum.net/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

results = soup.findAll('a','link_favorsch')
print(results)

 

 

 

 

 

다음 실시간 검색어 전체 코드

from bs4 import BeautifulSoup
import requests
from datetime import datetime

url = "http://www.daum.net/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
rank = 1

results = soup.findAll('a','link_favorsch')

search_rank_file = open("rankresult.txt","a")

print(datetime.today().strftime("%Y년 %m월 %d일의 실시간 검색어 순위입니다.\n"))

for result in results:
    search_rank_file.write(str(rank)+"위:"+result.get_text()+"\n")
    print(rank,"위 : ",result.get_text(),"\n")
    rank += 1

 

 

 

 


 

 

+추가) 파일에 저장하기

 

 

 

 

++추가) 크롤링 방지 사이트

headers = {'User-Agent':정보정보정보}
url = "[https://datalab.naver.com/keyword/realtimeList.naver?age=20s](https://datalab.naver.com/keyword/realtimeList.naver?age=20s)"
response = requests.get(url,headers=headers)
💡 네이버와 같은 크롤링 방지가 된 사이트에선 다음과 같이 “우리는 로봇이 아니고 이러한 환경에서 크롤링하고있는 사람이다” 라고 알려주는 코드를 추가해줘야한다.