Requests

XTHK·2024년 12월 7일

Anaysis

목록 보기
10/23
  • 데이터 크롤링 : 웹사이트에서 자동으로 데이터를 수집하는 과정

  • crawling / scraping
    - crawling : 여러 페이지를 자동으로 이동하면서 데이터를 수집
    - scraping : 특정 페이지에서만 데이터를 수집

  • crawling에 사용하는 라이브러리
    - request : http 요청을 보내기 위해 사용되는 라이브러리
    - beautiful soup : html & xml 문서 분석 및 파싱 라이브러리
    - selenium : 웹 브라우저를 자동으로 제어 (사용자의 클릭 위치 지정 가능)

  • scrapy : api 및 클래스를 이용한 크롤링 라이브러리

  • 추출 : 텍스트만 가져옴 / 파싱 : HTML 문서를 구조화


데이터 크롤링 과정

  1. 시작 URL 설정 : URL (Uniform Resource Locator)을 설정하여 어디서 크롤링할지 정함
  2. 웹 페이지 요청 및 다운로드 : 설정한 URL로 HTTP 요청을 보내 해당 페이지 내용을 다운로드
  3. 데이터 파싱 : 다운로드 된 웹페이지의 HTML 코드를 분석하여 필요한 데이터를 추출
  4. 데이터 저장 : 추출한 데이터를 csv, 데이터베이스, 파일 등의 형태로 저장
  5. 링크 추출 및 순회 : 현재 페이지에서 다른 페이지로 이동

데이터 크롤링 주의사항

  • 저작권과 사용 약관 준수 : 크롤링 대상 웹사이트의 저작권과 robots.txt 파일, 사용 약관을 확인하여 규정을 준수
  • robot.txt : 로봇(웹크롤러)의 크롤링 권한 규정 지침서
  • 서버 부하 관리 : 너무 많은 요청 시, 웹사이트 서버에 부하를 줄 수 있으므로 적절한 시간 간격을 두고 요청
  • 데이터 처리와 보안 : 수집한 데이터를 안전하게 처리하고 개인정보 보호법 등 데이터 보호 관련 법률을 준수

#### 웹페이지 접근 
###### 예시) 연금복권

import requests 

url = requests.get('https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EC%97%B0%EA%B8%88%EB%B3%B5%EA%B6%8C')

###### print(url)의 결과가 <response 200>일 경우, 접근 성공

#### 데이터 구조화

from bs4 import BeautifulSoup

##### 보기 좋은 구조로
soup = BeautifulSoup(url.text[:500], 'html.parser')
pretty_html = soup.prettify()
pretty_html

#### find / find_all
html.find('a, attr = {'class' : 'text _select_trigger _text'}) 

#### .span('a')
html.find('a, attr = {'class' : 'text _select_trigger _text'}).span('a')
##### 추출한 데이터 중 <span> 태그를 단 모든 데이터를 추출

##### 뒤에 .text() 입력 시 텍스트만 추출 가능

#### 웹 테이블 추출
##### 예시) 네이버 코스피 데이터
import pandas as pd

url = requests.get(''https://finance.naver.com/sise/sise_market_sum.naver')

pd.read_html(url.text)


## 추가
### 웹페이지 접근 우회
dic = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1)'}

url = requests.get('https://finance.naver.com/item/sise_day.naver?code=005930',
                   headers = dic)
profile
Analyse the world

0개의 댓글