Python Web Crawling [requests]

이정연·2023년 2월 24일
0

Play Data

목록 보기
1/26

requests는 언제?

플레이 데이터를 다니며 파이썬의 웹 크롤링을 할 때 배운 2개의 라이브러리가 있다.

requestsselenium

각각 어떤 목적에서 사용될까? 🤔

보통 웹 컨트롤이 필요할 경우(클릭)에는 selenium을 활용하고, 그렇지 않다면 requests 방법을 이용하는 것이 일반적이다.

왜냐하면 속도가 [requests > selenium]이기 때문이다.

requests는 보통 BeautifulSoup와 많이 쓴다.

requests로 긁어온 데이터를 BeautifulSoup로 파싱하는 것이다.

네이버 주식 크롤링

네이버 주식 정보에서 데이터를 가져오는 연습을 해보도록 하겠다.

우리가 들어갈 주소는 바로 여기 !

https://finance.naver.com/item/sise_day.naver?code=005930&page=1

5930 코드는 삼성전자를 의미한다.

우리는 여기서 위의 이미지와 같은 데이터 테이블을 가져올 것이다.

import requests 
import pandas as pd
def get_stock(url):
    head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}
    df=pd.concat([pd.read_html(requests.get(url.format(x), headers=head).text)[0].dropna() for x in range(1,5)])
    return df

url 주소를 가져와 pandas의 데이터프레임으로 변환하는 함수다.

  • 실행 결과
url = "https://finance.naver.com/item/sise_day.naver?code=005930&page={}"
df = get_stock(url)

GET? POST?

통신 방식에는 크게 get 방식과 post 방식이 있다.

자세한건 추후 포스팅에서 다루기로 하고 일단 requests를 사용할 때 이 웹페이지가 어떤 통신 방식을 차용하는지를 알아야 한다.

크롬기준 "개발자 도구/ 네트워크 / 헤더 / 일반 / 요청 메서드"에서 알 수 있다.

post 방식은 파라미터로 payload값을 넘겨주어야 한다.

{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}

그리고 네이버 같이 파이썬으로 웹 페이지를 접근하면 세션을 종료시키는 곳이 있다.

그럴 경우, header에 위 텍스트를 파라미터로 넘겨주면 차단을 피할 수 있다.

스타벅스 크롤링

마찬가지로 스타벅스 홈페이지도 크롤링을 해볼건데 이번에는 POST 방식에 json 형식으로 받아오겠다.

import requests

def get_data(url,payload):
    r =  requests.post(url, data=payload)
    return r.json()['list']

url과 payload를 이용하여 json 형태로 데이터 반환

payload는 "network/payload/form data"에서 알 수 있다.

  • 실행 결과
url = "https://www.starbucks.co.kr/store/getStore.do?r=GKYHQKU7D3"
payload = {"in_biz_cds" : "0",
"in_scodes" : "0",
"ins_lat" : "37.566535",
"ins_lng" : "126.9779692",
"search_text" : "",
"p_sido_cd" : "01",
"p_gugun_cd" : "",
"in_distance" : "0",
"in_biz_cd" : "",
"isError" : "true",
"searchType" : "C",
"set_date" : "",
"all_store" : "0",
"T03" : "0",
"T01" : "0",
"T27" : "0",
"T12" : "0",
"T09" : "0",
"T30" : "0",
"T05" : "0",
"T22" : "0",
"T21" : "0",
"T10" : "0",
"T36" : "0",
"T43" : "0",
"T48" : "0",
"P10" : "0",
"P50" : "0",
"P20" : "0",
"P60" : "0",
"P30" : "0",
"P70" : "0",
"P40" : "0",
"P80" : "0",
"whcroad_yn" : "0",
"P90" : "0",
"new_bool" : "0",
"iend" : "1000",
"rndCod" : "IZVHHSIFWC",}
star = get_data(url,payload)

profile
0x68656C6C6F21

0개의 댓글