1. 정적 페이지 크롤링
- 정적 페이지의 좋은 예가 네이버 증시 페이지 이다. 이걸 기준으로 내용 정리를 하려 한다.
- 해당 페이지의 url 은 https://finance.naver.com/sise/sise_index_day.naver?code=KPI200&page= {page_no} 로,
페이지 번호가 바뀌면 url 이 변경된다.
- beautifulsoup4 를 통해 페이지 내용을 가져온 후, 원하는 데이터를 추출해 온다.
크롬 브라우저에서 F12를 눌러 개발자 모드로 진입 한 뒤, 내가 원하는 항목에 마우스를 갖다대면,
우측에 소스코드가 나오게 된다. 해당 화면에서 마우스 우클릭 -> Copy XPath를 하여 find_all 에 사용할 이름을 확인한다.
import requests
import bs4
number = 1
page_url = f"https://finance.naver.com/sise/sise_index_day.naver?code=KPI200&page={number}"
source = requests.get(page_url).text
source = bs4.BeautifulSoup(source)
dates = source.find_all("td",class_ = "date")
아래처럼 날짜를 가져오게 된다.
'2023.02.13',
'2023.02.10',
'2023.02.09',
'2023.02.08',
'2023.02.07',
'2023.02.06'
가격 정보 가져오기
prices = source.find_all("td",class_ = "number_1")
price_list = []
for price in prices[::4]:
price_list.append(price.text)
price_list
- 배열에 ::4의 의미는, 처음부터 4 간격으로 데이터를 가져오겠다는 뜻으로, 점프를 하게 된다.
- find_all의 결과인 prices 의 텍스트를 보면, td 클래스가 하나에 4개씩 들어가 있고, 그중 첫번째가 가격정보 이다.
- 아래는 prices 의 원본이다
[<td class="number_1">323.13</td>, <td class="number_1">
<span class="tah p11 red01">
+1.67%
</span>
</td>, <td class="number_1" style="padding-right:40px;">86,068</td>, <td class="number_1" style="padding-right:30px;">4,932,899</td>, <td class="number_1">317.82</td>, <td class="number_1">
<span class="tah p11 nv01">
-1.77%
</span>
</td>, <td class="number_1" style="padding-right:40px;">145,369</td>, <td class="number_1" style="padding-right:30px;">7,946,592</td>, <td class="number_1">323.56</td>, <td class="number_1">
<span class="tah p11 red01">
+0.56%
</span>
</td>, <td class="number_1" style="padding-right:40px;">121,196</td>, <td class="number_1" style="padding-right:30px;">6,690,164</td>, <td class="number_1">321.75</td>, <td class="number_1">
<span class="tah p11 red01">
+0.43%
</span>
</td>, <td class="number_1" style="padding-right:40px;">155,303</td>, <td class="number_1" style="padding-right:30px;">9,273,697</td>, <td class="number_1">320.38</td>, <td class="number_1">
<span class="tah p11 nv01">
-0.51%
</span>
</td>, <td class="number_1" style="padding-right:40px;">137,961</td>, <td class="number_1" style="padding-right:30px;">7,276,002</td>, <td class="number_1">322.03</td>, <td class="number_1">
<span class="tah p11 red01">
+1.25%
</span>
</td>, <td class="number_1" style="padding-right:40px;">194,245</td>, <td class="number_1" style="padding-right:30px;">9,773,752</td>]
- 아래는 이 데이터에서 가격정보 text만 추출한 결과이다.
['323.13', '317.82', '323.56', '321.75', '320.38', '322.03']
for 문을 이용하여 page 번호를 바꿔 url을 호출하고 위의 작업을 하면, 각 페이지 별로 크롤링을 할 수 있다.
마지막 페이지 번호 확인 하기
웹페이지에 보면, 맨뒤 라는 항목이 있다. 해당 부분을 크롬 브라우저를 통해 위에서 한것처럼 데이터를 가져오면, 마지막 페이지 번호를 확인 할 수 있다.
p = source.find_all("td",class_ = "pgRR")[0].find_all("a")[0]["href"]
index = int(p.split("page=")[-1])
'데이터분석(파이썬)' 카테고리의 다른 글
EDA (Exploratory Data Analysis) (0) | 2023.04.10 |
---|---|
Pandas (0) | 2023.04.10 |
동적 웹크롤링 (Selenium, Cromedriver) (0) | 2023.04.10 |
웹 크롤링 기획 기본 (0) | 2023.04.07 |
데이터 분석 개요 (0) | 2023.04.07 |