# [크롤링] 웹 크롤링 하기 01
2024. 12. 17. 12:52ㆍ개발/웹 스크래핑
📌 본 포스팅은 파이썬을 사용한 웹크롤링 에 대한 내용을 다룹니다.
📌 맥환경, vscode 환경
1. 설치 및 기본 테스트
- vscode -> 쉘에서 !를 붙이고 pip 설치 해준다.
- !pip install requsts # 웹 사이트 정보 가져오기
- !pip install beautifulsoup4 # html 정보로 부터 원하는 데이터 분류 및 parsing 라이브러리
- request, response 는 사이트에 요청과 응답이다. status_code 200 이 나오면 잘 연결된것 임.
## request test import requests response = requests.get('http://www.naver.com') print(f"{response.status_code}") # 응답코드 출력 print(response.text)
2. 네이버 지식인 크롤링 테스트
2.1 인터넷 창 작업
- naver 지식인 검색 '파이썬'-> fn + f12(inspect mode) -> 특정 링크를 클릭해서 html 을 선택-> copy selector-> css
[copy 된 CSS selector ]
#s_content > div.section > ul > li:nth-child(1) > dl > dt
2.2 파이썬 코딩
### PYTHON CODE ###
## 2.2.1 네이버 in 크롬창의 url 복사
url = 'https://kin.naver.com/search/list.naver?query=%ED%8C%8C%EC%9D%B4%EC%8D%AC'
response = requests.get(url)
if response.status_code == 200:
## 2.2.2 html code 를 받음.
html = response.text
## 2.2.3 파싱을 위해 soup 객체 사용, html parser 사용
soup = BeautifulSoup(html,'html.parser')
## 2.2.4 CSS selector 를 통해 원하는 엘리멘트 추출
title_1 = soup.select_one('#s_content > div.section > ul > li:nth-child(1) > dl > dt')
print(title_1)
## text 추출
print(title_1.text)
## 2.2.5 검색 결과 부분 <li> 태그로 반복되는 부분을 체크
ul = soup.select_one('ul.basic1')
## 2.2.6 지식인에서 검색된 목록중 제목만 추출
title_2 = ul.select("li>dl>dt>a")
print(f"추출 4 {title_2}")
for i in title_2:
print(i.get_text())
else: print(response.status_code)
📌 크롤링은 html 위치 찾고 print 해가면서 원하는 자료에 접근하는 능력이 필요하다. 인터넷 창에서 한번에 inspect 를 찾는것보다 inspect 창에서 일일히 토글을 풀어가면서 창에서 하이어라키를 확인해가며 요소를 찾는 것이 사이트 전체 구조를 익히는데 도움이 된다.
3. 야구 타자 테이블 크롤링 하기
2.1 크롬 inspector 작업
### PYTHON CODE ###
# URL address
#https://www.koreabaseball.com/Record/Player/HitterBasic/BasicOld.aspx?sort=HRA_RT
# INSPECTOR
#cphContents_cphContents_cphContents_udpContent > div.record_result > table
#contents > h4
2.2 Beuatifulsoup 을 사용하여 html parsing
## LIBRARY
import requests
from bs4 import BeautifulSoup
url ='https://www.koreabaseball.com/Record/Player/HitterBasic/BasicOld.aspx?sort=HRA_RT'
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
2.3 타이틀 엘레먼트 추출 (기록실)
title = soup.select_one("#contents > h4")
print(title.get_text())
## inspector 주소 추출
#cphContents_cphContents_cphContents_udpContent > div.record_result > table
record_table = soup.select_one("#cphContents_cphContents_cphContents_udpContent > div.record_result > table")
# print(record_table.get_text())
2.4 타자 기록 요소 추출
## table 안에 table body 추출
#cphContents_cphContents_cphContents_udpContent > div.record_result > table > tbody
record_tr = soup.select_one("#cphContents_cphContents_cphContents_udpContent > div.record_result > table > tbody")
# print(record_tr)
repeat_tr = record_tr.select('tr')
2.5 타자 기록 요소 판다스 테이블만들기
import pandas as pd
tr = []
for rec in repeat_tr:
a ={f"d{i}":rec.select_one(f"td:nth-child({i})").get_text() for i in range(1,20)}
tr.append(a)
column_name = ['순위','선수명','팀명','타율', '경기','타석', '타수', '안타', '2루타', '3루타', '홈런', '타점', '도루', '도루실패', '볼넷', '사구', '삼진', '병살타', '실책']
len(column_name)
tr_df = pd.DataFrame(tr)
tr_df_col_rename = {f"{di}": column_name[name] for name,di in enumerate(tr_df.columns)}
tr_df.rename(columns=tr_df_col_rename,inplace=True)
tr_df
'개발 > 웹 스크래핑' 카테고리의 다른 글
# [크롤링] 나라 장터 크롤링 하기01 (1) | 2024.12.31 |
---|---|
[crawling]나라장터 크롤링 하기 (0) | 2024.12.24 |
# [크롤링] 필수 HTML 태그 지식 에 대하여 (2) | 2024.12.17 |