일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파워포인트
- Android
- 윈도우11
- pyqt5
- 윈도우10
- win32com
- windows
- 깃
- html
- pythongui
- matlab
- Outlook
- 엑셀
- 파이썬3
- 파이썬GUI
- 비주얼베이직
- Windows10
- 안드로이드
- office
- python3
- pandas
- python
- 문자열
- Windows11
- 파이썬
- git
- Excel
- VBA
- 아웃룩
- 오피스
Appia의 IT세상
[파이썬 크롤링]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로 확인하기
그럼 약간 다음 부분에 대해서 이야기를 해보도록 하겠습니다. 먼저 다음과 같은 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를 이용하여 추출을 해보도록 하겠습니다. 먼저 이전에 했던 포스팅은 다음 링크를 통해 참조해주시길 바랍니다.
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기
그럼 다음 코드를 바탕으로 확인해보도록 하겠습니다.
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를 사용할 수 있습니다.
[파이썬 크롤링]네이버 주식 시가 총액 코스피,코스닥 항목 엑셀로 추출하기 (종목, 종가)
이번 포스팅에서는 [파이썬 크롤링]CSS Selector 사용해보기라는 주제로 포스팅을 진행해봤습니다. 실제 find / select함수를 복합적으로 사용하는 경우도 많고, 실제 어떤 부분이 더 효율적이라고 할 수는 없습니다. 사용자가 사용하기 편리하 한 부분을 바탕으로 효율적으로 사용하시길 바랍니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다.
'Python > Python Crawler[크롤러]' 카테고리의 다른 글
[파이썬 크롤링] 네이버 금융 환전고시 환율 정보 출력하는 방법 (2) | 2021.10.07 |
---|---|
[파이썬 크롤링] Beautiful Soup에서 #document 부분에 대해서 크롤링 하는 방법 (4) | 2021.10.06 |
[파이썬 크롤링]네이버 주식 시가 총액 코스피,코스닥 항목 엑셀로 추출하기 (종목, 종가) (0) | 2021.09.30 |
[파이썬 크롤링]네이버 주식 시가 총액 코스닥전체 항목 출력하기 (1) | 2021.09.27 |
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기 (0) | 2021.09.26 |