PYTHON/Web Scraping

2.1 웹 스크래핑 - 원하는 자료 찾기 (1)

  • -

 

지난 게시글
1.1 웹 스크래핑 - 방법 알아보기
1.2 웹 스크래핑 - urlopen과 beautifulsoup4 사용 방법 (1)
1.3 웹 스크래핑 - urlopen과 beautifulsoup4 사용 방법 (2)
1.4 웹 스크래핑 - requests 라이브러리도 사용해보기(1)


 

원하는 태그 찾기

네이버 증권에서 찾고자 하는 데이터의 위치가 <div class='box_type_l'>이라는 것을 확인했고, 그 안에 있는 데이터를 불러오기까지 성공했다. 그렇다면 이제 그 안에서 원하는 데이터들을 얻어와야 하는데, 이것 역시 우리가 앞서 box_type_l이라는 값을 찾았던 것처럼 동일한 방식으로 진행해서 데이터를 감싸고 있는 태그를 찾아내면 된다. 아래의 결과값을 확인해보자.

<td class="tc"><img alt="01" height="11" src="https://ssl.pstatic.net/imgstock/images5/ico_n01.gif" width="11"/></td>
<td class="number">1</td>
<td class="number">1</td>
<td><a class="tltle" href="/item/main.naver?code=002420" onclick="clickcr(this, 'bqu.2', '002420', '1', event)">세기상사</a></td>
<td class="number">16,050</td>
<td class="number">
<em class="bu_p bu_pup2" style="margin:0 4px 0 0"><span class="blind">상한</span></em><span class="tah p11 red01">

먼저 <td><a class="tltle" href="~~~~~~~~라고 되어 있는 부분에서 종목코드(002420)와 종목명(세기상사)라는 정보가 포함되어 있다는 점을 확인할 수 있다.  그렇다면 우리는 <td> 태그 내의 <a> 태그를 찾고, <a> 태그가 걸려 있는 데이터 중 클래스가 "tltle"인 데이터들을 불러오면 된다. 
※ 여기서의 tltle는 타이틀을 의미하는 TITLE이 아니라, TLTLE이다. 
※ 마찬가지로 box_type_l도 BOX_TYPE_1이 아니라 BOX_TYPE_L이다.

 

from bs4 import BeautifulSoup as bs
import requests

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

if response.status_code == 200:
	html = response.text
	bsObj = bs(html, 'html.parser')
	test = bsObj.select_one('div.box_type_l')
	test_2 = test.select('td > a.tltle')
	print(test_2)
else:
    pass
    
    
>>>
[<a class="tltle" href="/item/main.naver?code=002420" onclick="clickcr(this, 'bqu.2', '002420', '1', event)">세기상사</a>, <a class="tltle" href="/item/main.naver?code

결과값을 보면, 앞서 찾고자 했던 데이터들만 정확하게 불러왔다는 것을 확인할 수 있다. 데이터가 한 줄로 보이는 이유는 바로 select문을 사용할 경우 해당 태그가 사용된 정보들을 리스트 형태로 입력하기 때문이다. 출력 결과물의 맨 앞을 보면 [], 즉 리스트 자료형임을 나타내는 대괄호가 포함되어 있음을 확인할 수 있다. 따라서 우리는 이 리스트 형태의 자료를 for문을 통해 하나하나씩 접근할 수 있다.

 

 

for문을 통해 데이터 접근하기

이제 아래와 같이 for문을 구축하게 되면, 그 결과물이 한줄 한줄씩 출력되는 모습을 확인할 수 있다.

from bs4 import BeautifulSoup as bs
import requests

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

if response.status_code == 200:
	html = response.text
	bsObj = bs(html, 'html.parser')
	test = bsObj.select_one('div.box_type_l')
	test_2 = test.select('td > a.tltle')

	for i in test_2:
		print(i)
else:
	pass
    

>>>
<a class="tltle" href="/item/main.naver?code=002420" onclick="clickcr(this, 'bqu.2', '002420', '1', event)">세기상사</a>
<a class="tltle" href="/item/main.naver?code=018700" onclick="clickcr(this, 'bqu.2', '018700', '2', event)">바른손</a>
<a class="tltle" href="/item/main.naver?code=053050" onclick="clickcr(this, 'bqu.2', '053050', '3', event)">지에스이</a>
<a class="tltle" href="/item/main.naver?code=114450" onclick="clickcr(this, 'bqu.2', '114450', '4', event)">KPX생명과학</a>
<a class="tltle" href="/item/main.naver?code=121850" onclick="clickcr(this, 'bqu.2', '121850', '5', event)">코이즈</a>
<a class="tltle" href="/item/main.naver?code=317830" onclick="clickcr(this, 'bqu.2', '317830', '6', event)">에스피시스템스</a>
<a class="tltle" href="/item/main.naver?code=403360" onclick="clickcr(this, 'bqu.2', '403360', '7', event)">예스피치</a>
<a class="tltle" href="/item/main.naver?code=215050" onclick="clickcr(this, 'bqu.4', '215050', '1', event)">비엔디생활건강</a>
<a class="tltle" href="/item/main.naver?code=117580" onclick="clickcr(this, 'bqu.6', '117580', '1', event)">대성에너지</a>
<a class="tltle" href="/item/main.naver?code=131220" onclick="clickcr(this, 'bqu.6', '131220', '2', event)">대한과학</a>
<a class="tltle" href="/item/main.naver?code=035620" onclick="clickcr(this, 'bqu.6', '035620', '3', event)">바른손이앤에이</a>
(이하생략)

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.