강의 내용을 직접 정리한 자료 입니다.
https://shaded-xylocarp-541.notion.site/d1c9bfea4cdd496c9e95156412165e6f
노션으로 먼저 정리하고.. 티스토리에 올리기..!
Crawler? Crawling?
❓ crawler?
- 기는 것
- 파충류
—> 컴퓨터 언어로 번역하면, 웹사이트를 기어다니면서 데이터를 모아주는 도구
💡 **우리가 원하는 정보를 찾고 싶을 때 무한한 정보 속에서 찾을 때 우리는 크롤링을 사용한다.**
모듈
Requests
✅ reguests 모듈의 get함수는 서버에 요청을 하는 함수이다.
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)
💡 네이버와 같은 크롤링 방지가 된 사이트에선 다음과 같이 “우리는 로봇이 아니고 이러한 환경에서 크롤링하고있는 사람이다” 라고 알려주는 코드를 추가해줘야한다.
'멋쟁이 사자처럼 > Codelion' 카테고리의 다른 글
[코드라이언 / 같이 푸는 PYTHON] 번역하기 (0) | 2022.01.09 |
---|---|
[코드라이언 / 같이 푸는 PYTHON] 날씨 정보 받아오기 (0) | 2022.01.09 |