Appia의 IT세상

[파이썬 크롤링]CSS Selector 사용하기 본문

Python/Python Crawler[크롤러]

[파이썬 크롤링]CSS Selector 사용하기

Appia 2021. 10. 5. 06:12
반응형

[파이썬 크롤링]CSS Selector 사용하기

[파이썬 크롤링]CSS Selector 사용하기

실제 이전 블로그 포스팅은 HTML 태그를 중심으로 Find와 Find_all 문을 토대로 관련된 데이터를 크롤링하였습니다. 하지만, 이와 같은 작업들은 생각보다 혼란을 줄 수 있고, 원하는 데이터를 선별하는데에 한계가 있을수 있다는 생각을 하였습니다. 그래서 친한 지인분께서, CSS Selector를 사용할 것을 추천하였습니다. 그래서 이번 포스팅은 CSS Selector를 사용하는 간단한 방법에 대해서 이야기를 해보고자 합니다. 

 

먼저, 해당 태그를 추출하는 방법은 매우 간단합니다. 다음 명령어를 살펴보겠습니다. 

List타입 = object.select('tag.class#id')

그럼 간단히 위의부분을 바탕으로 다음 예제를 보겠습니다. 

import requests
from bs4 import BeautifulSoup

res = requests.get(address)
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('div')

 

간단하게 위의 부분을 보면서 이야기를 진행하겠습니다. 실제 이전에서의 블로그에선 find 명령어를 통해서 해당되는 부분을 찾을 수 있었습니다. 여기에서는 "select"명령어를 통해서 추출할 수 있습니다. 

 

select명령어를 사용하기 위해서, 해당 부분에 대해서 selector로 어떻게 표현되는 지에 대해서 확인하는 방법이 크롬(chrome)에서는 제공을 하고 있습니다. 관련해서는 다음 링크를 통해서 확인하시길 바랍니다. 

윈도우10 Windows10] 크롬(Chrome)에서 웹페이지 항목 CSS Selector로 확인하기

 

[윈도우10 Windows10] 크롬(Chrome)에서 웹페이지 항목 CSS Selector로 확인하기

[윈도우10 Windows10] 크롬(Chrome)에서 웹페이지 항목 CSS Selector로 확인하기 웹크롤링을 하다보면, HTML과 CSS에 대해서 약간의 지식이 필요합니다. 그 부분을 바탕으로 필요한 부분을 크롤링 하기

appia.tistory.com

그럼 약간 다음 부분에 대해서 이야기를 해보도록 하겠습니다. 먼저 다음과 같은 HTML구조가 되어 있는 부분이 존재합니다.

예제

실제 <a>부분을 추출하고자 합니다. 이 때 다음과 같은 CSS selector를 사용할 수 있습니다. 

'body > div > a'

여기에서 보이는 '>'부분은 바로 자식 태그에 대해서 검색해서 들어가는 것입니다. 만약 body 태그 다음에 a 태그가 나타난다면, 위의 방법으로는 확인할 수 없습니다. 그럴 경우 다음과 같이 변경을 해줄 수 있습니다. 

'body a'

태그 사이에 공백을 두면, 실제 가운데에 경로점에 상관없이 겸색할 수 있습니다. 이와 같은 형태로 사용을 해야 합니다. 

 

그럼, 위의 코드에서 id를 사용할 경우 #를 이용할 수 있습니다. 그럼 다음과 같은 구성이 될 것입니다. 

'div#u_skip a'

 

Class의 경우는 .클래스이름을 나타내주시면 됩니다. 간단한 예로 다음과 같이 표현해보도록 하겠습니다. 

'#contentarea > div.box_type_l > table.type_2 > tbody > tr'

 

그럼 이전에 포스팅했던 코스피 시가 총액을 출력하는 부분을 css selector를 이용하여 추출을 해보도록 하겠습니다. 먼저 이전에 했던 포스팅은 다음 링크를 통해 참조해주시길 바랍니다. 

[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기

 

[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기

[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기 이전 포스팅에서는 네이버 주식에서 시갈총액의 첫번째 화면에 있는 항목과 가격에 대해서 출력을 하는 방법에 대해서

appia.tistory.com

그럼 다음 코드를 바탕으로 확인해보도록 하겠습니다. 

import requests
from bs4 import BeautifulSoup

def return_value(address):
    res = requests.get(address)
    soup = BeautifulSoup(res.content, 'html.parser')


    items = soup.select('#contentarea > div.box_type_l > table.type_2 > tbody > tr')
    for item in items:

        try :
            if item['onmouseover'] == 'mouseOver(this)':
                print(item.select('td')[0].text +"\t" + item.select('td')[1].text+"\t"+ item.select('td')[2].text)

        except :
            continue

baseaddress = 'https://finance.naver.com/sise/sise_market_sum.naver?&page='
for i in range(1,35):
    return_value(baseaddress+str(i))

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

1	삼성전자	73,200
2	SK하이닉스	100,000
3	NAVER	382,000
4	삼성바이오로직스	875,000
5	삼성전자우	68,000
6	LG화학	770,000
<중간 생략>
1659	KBSTAR 200생활소비재	8,070
1660	TIGER 200 생활소비재	10,610
1661	KBSTAR 미국장기국채선물인버스(H)	7,975
1662	QV 인버스 레버리지 WTI원유 선물 ETN(H)	395
1663	TIGER 원유선물인버스(H)	5,505
1664	대신 인버스 니켈선물 ETN(H)	5,015
1665	KBSTAR 미국장기국채선물인버스2X(합성 H)	5,885
1666	동양3우B	33,800
1667	KBSTAR 팔라듐선물인버스(H)	6,020
1668	KBSTAR 국채선물5년추종	49,305

이와 같은 방식으로 css selector를 사용할 수 있습니다. 

[파이썬 크롤링]네이버 주식 시가 총액 코스피,코스닥 항목 엑셀로 추출하기 (종목, 종가)

 

[파이썬 크롤링]네이버 주식 시가 총액 코스피,코스닥 항목 엑셀로 추출하기 (종목, 종가)

[파이썬 크롤링]네이버 주식 시가 총액 코스피,코스닥 항목 엑셀로 추출하기 (종목, 종가) 먼저 앞선, 포스팅에서 코스피, 코스닥 종목에 대해서 종목과 가격에 대해서 출력하는 방법에

appia.tistory.com

이번 포스팅에서는 [파이썬 크롤링]CSS Selector 사용해보기라는 주제로 포스팅을 진행해봤습니다. 실제 find / select함수를 복합적으로 사용하는 경우도 많고, 실제 어떤 부분이 더 효율적이라고 할 수는 없습니다. 사용자가 사용하기 편리하 한 부분을 바탕으로 효율적으로 사용하시길 바랍니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments