이번 포스팅에서는 웹 페이지에서 크롤링 후 원하는 데이터의 태그 위치를 찾는 방법에 대해 알아보겠습니다.(크롬을 이용합니다)
네이버 증권 일별 시세에서 원하는 데이터를 가져오는 방법으로 설명드리겠습니다.
네이버 증권에 들어가 삼성전자(005930)를 검색하고 시세 탭에 들어갑니다. 다른 종목으로 하셔도 됩니다.
일별 시세에서 마우스 오른쪽을 클릭해서 프레임 소스 보기를 클릭합니다.
일별시세 프레임의 소스가 표시됩니다.
url 주소창에 view-source:를 삭제하고 엔터키를 누릅니다.
그러면 다음과 같이 일별시세만 화면에 표시됩니다.
이제부터 원하는 데이터의 위치 찾기입니다.
날짜 필드의 첫번째 날짜 위치를 찾아보겠습니다.
날짜 필드의 첫번째 날짜에 마우스를 갖다대고 마우스 오른쪽 클릭하여 검사 버튼을 누릅니다.
그러면 크롬 창 오른쪽에 해당 데이터의 태그를 찾아갑니다.
파이썬으로 해당 위치를 찾아가 보도록 하겠습니다.
먼저 해당 페이지에서 span태그가 몇개 있는지 살펴보겠습니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
naver_index = 'https://finance.naver.com/item/sise_day.nhn?code=005930'
source = urlopen(naver_index).read()
source = BeautifulSoup(source, 'lxml')
span = source.find_all('span')
print(len(span))
해당 페이지에서 span은 71개가 나왔습니다.
이렇게 같은 태그가 많은 페이지에서 원하는 데이터의 위치를 찾을 때 사용하는 방법이 있습니다. 바로 XPath 입니다.
다음 그림처럼 Elements탭에서 가져오고자 하는 데이터를 선택 후 마우스 오른쪽 클릭하여 Copy -> Copy XPath를 클릭합니다.
붙여넣기(Ctrl + v) 해보면 다음과 같은 정보가 나옵니다.
/html/body/table[1]/tbody/tr[3]/td[1]/span
앞에서부터 html -> body -> table -> tr -> td -> span으로 찾아가라는 것입니다.
XPath 상의 tbody는 실제 코드상에 있는 것이 아니라 여기에서부터 테이블이 시작된다고 표시하는 것이기 때문에 tbody는 제외해야 합니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
naver_index = 'https://finance.naver.com/item/sise_day.nhn?code=005930'
source = urlopen(naver_index).read()
source = BeautifulSoup(source, 'lxml')
span = source.find_all('table')[0].find_all('tr')[2].find_all('td')[0].find('span')
print(span)
결과로 <span class="tah p10 gray03">2020.12.04</span> 가 나옵니다.
여기서 span.text를 print하면 2020.12.04 값만 추출되는 걸 볼 수 있습니다.
웹페이지에서 크롤링하여 원하는 데이터를 추출하는 방법에 대해 알아보았습니다.
'Programming > Python' 카테고리의 다른 글
[Pandas] 데이터프레임(DataFrame) DB(SQLite)에 저장(Insert) (0) | 2020.12.11 |
---|---|
[Python] 분봉 데이터프레임(DataFrame)에 담기 (0) | 2020.12.06 |
[numpy] No module named 'numpy.core._multiarray_umath' (0) | 2020.11.30 |
[PyCharm] (는) 올바른 Win32 응용 프로그램이 아닙니다. (0) | 2020.11.30 |
[Python] datetime 라이브러리 (0) | 2020.11.15 |