섹션 3 : 실전 프로젝트 1) 뉴스 데이터 수집하기
(1) 특정 검색어 뉴스의 제목과 링크를 크롤링하기
📌 제목은 a 태그 안쪽 텍스트, 링크는 href 속성값.
import requests
from bs4 import BeautifulSoup
response =requests.get("https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select(".news_tit") # 결과가 리스트
print(links)
print()
for link in links:
title = link.text # 태그 안의 텍스트 요소를 가져옴
url = link.attrs['href'] # href의 속성값을 가져옴
print(title, url)
(2) 검색어에 따라 다른 결과를 나타내기 : pyautogui
- url : ex) https://search.naver.com/search.naver?where=news&sm=tab_jum&query=삼성전자
- 인터넷 주소 형식
- Protocol - Domain - Path - Parameter 영역으로 구성된다.
- protocol : http, https
- domain : IP주소에 이름을 준 것
- path : 서버에서 해당 페이지의 경로
- parameter : key와 value로 구성된다. 서버에 추가적인 정보를 제공하기 위해서 사용. query는 검색어에 해당.
import requests
from bs4 import BeautifulSoup
keyword = input("검색어를 입력하세요>>>")
response =requests.get("https://search.naver.com/search.naver?where=news&sm=tab_jum&query="+keyword)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select(".news_tit") # 결과가 리스트
print(links)
print()
for link in links:
title = link.text # 태그 안의 텍스트 요소를 가져옴
url = link.attrs['href'] # href의 속성값을 가져옴
print(title, url)
- pyautogui
- 마우스, 키보드 매크로 라이브러리
- 간단한 입력 창 띄우기
- 설치 : 터미널에 pip install pyautogui 입력
- 입력창 띄우기 : pyautogui.prompt("검색어를 입력하세요!")
import requests
from bs4 import BeautifulSoup
import pyautogui
keyword = pyautogui.prompt("검색어를 입력하세요>>>")
response =requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select(".news_tit") # 결과가 리스트
print(links)
print()
for link in links:
title = link.text # 태그 안의 텍스트 요소를 가져옴
url = link.attrs['href'] # href의 속성값을 가져옴
print(title, url)
(3) 여러 페이지 결과 모두 가져오기 : 반복문
- URL 분석하기 : 페이지를 변경하면 cluster_rank와 start 값이 변함.
https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=31&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=11
📌 cluster_rank
교양 과목에서 배웠던 구글의 페이지랭크 알고리즘과 유사한 알고리즘의 결과라고 생각하고 강의를 들었다. 검색 결과로 나오는 내용들 각각에 순위를 매겨서 가장 관련성이 높은 것부터 보여주기 위해 사용하는 값이 아닐까 싶다! 이에 대해서좀 더 찾아봐야 할 것 같다.
📌start : 1페이지 start = 1, ... n번째 페이지 start = (n-1)*10+1
import requests
from bs4 import BeautifulSoup
import pyautogui
keyword = pyautogui.prompt("검색어를 입력하세요>>>")
lastpage = pyautogui.prompt("마지막 페이지 번호를 입력해주세요>>>")
pageNum = 1
for i in range(1, int(lastpage)*10, 10): # 1~3 페이지
print(f"================={pageNum} 페이지 내용 출력=================")
response =requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select(".news_tit") # 결과가 리스트
print(links)
for link in links:
title = link.text # 태그 안의 텍스트 요소를 가져옴
url = link.attrs['href'] # href의 속성값을 가져옴
print(title, url)
pageNum += 1
섹션 4 : 실전 프로젝트 2) 주가 정보 데이터 수집하기
; 네이버 증권 웹사이트에서 현재가를 크롤링해서 엑셀에 저장하기
(1) 크롤링
- 현재가 : id값이 _nowVal인 태그, 종목 : url에서의 code 파라미터 값
import requests
from bs4 import BeautifulSoup
# 종목 코드 리스트
codes = [
'005930',
'000660',
'035720'
]
for code in codes:
url = f"https://finance.naver.com/item/sise.naver?code={code}"
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
price = soup.select_one("#_nowVal").text
price = price.replace(',', '') # 숫자 내 , 제거
print(price)
(2) 엑셀 사용하기
- openpyxl
- 파이썬에서 엑셀을 쉽게 다룰 수 있도록 도와주는 라이브러리
- 설치 : 터미널에 pip install openpyxl
- ex) 엑셀 파일을 새롭게 만들어서 데이터 추가 후 저장
import openpyxl
# 1. 엑셀 만들기
wb = openpyxl.Workbook()
# 2. 엑셀 워크시트 만들기
ws = wb.create_sheet('오징어게임')
# 3. 데이터 추가하기
ws['A1'] = '참가번호'
ws['B1'] = '성명'
ws['A2'] = 1
ws['B2'] = '오일남'
# 4. 엑셀 저장하기
wb.save(r'C:\startcoding\02_파이썬엑셀다루기\참가자_data.xlsx')
- ex) 존재하는 엑셀 파일을 가져와서 수정 후 저장
- 존재하는 엑셀 파일에 빈칸 채우기 : 특정 종목의 현재가 채우기
- 공식문서
- 프로그램을 개발한 사람들이 사람들에게 사용법을 알려주는 사이트
📍openpyxl 공식문서 사이트
https://openpyxl.readthedocs.io/en/stable/tutorial.html
다음 주면 완강입니다~
'학회&동아리 > FORZA' 카테고리의 다른 글
[FORZA STUDY] 스타트 코딩 - 이것이 진짜 크롤링이다 기본편 week3 (0) | 2023.07.10 |
---|---|
[FORZA STUDY] 스타트 코딩 - 이것이 진짜 크롤링이다 기본편 week1 (0) | 2023.06.21 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week6 (2) | 2023.05.27 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week5 (0) | 2023.05.21 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week4 (0) | 2023.05.14 |