개인 자료란 (JE)

  서버 커뮤니티

Profile 라고솔로가말했습니다 대표칭호 없음

SaidBySolo 8b58f951b6404b78ae3ba92d55d431f7

Profile

커뮤니티 소통 개발하기 프로그래밍

웹크롤링 다시는! 다시는 안하겠소!

2020.08.23 조회 수 347 추천 수 1

라고 생각했던 제가 안일해보이네요

836461180a9b1c93dc0cfb5118cb2c50.png다시는 안할줄 알았단 말이야ㅠㅠㅠㅠ

예전에 파이썬 처음 시작할때 코로나 웹크롤링을 했었는데

진짜 엄청난 노가다였던게 PTSD로 오네요


근데 그걸 또하게되네요?

8777db16a00fc99969eb13746dc7e460.pngㅎㅎㅎㅎㅎㅎㅎㅎ 어쩌겠어요 뜯어야죠

차근차근 해보자고요 차근차근

f0d6665f5d31699b63519875f93aa3ae.pngapi내놓으라고 ㅠㅠㅠㅠ

일단 질병관리본부를 들갑시다.

그래야 뭐 뜯던지 말던지 결정이라도 할수있으니까요.

b9c5b3212c4756b721fc3638f3d936ed.png


제가 뜯어올거는 이 4개뿐이에요

더도말고 이 4개

더뜯기에는 제가 너무 귀찮거든요

27735830c9570a2560d7beb506ae337b.png

바로 눌러서 어케 생겼는지 구경해봅시다.



658803de785948c9fdc444d3cb8a9ca2.png

보니까 생각보다 쉬울거같은거에요!

컨테이너 안에 livenum만 가져오고 findall해서 리스트로 뽑아내면 될거같다 생각했죠.

그러면 바로 작업을 시작해야겠죠

import aiohttp
from bs4 import BeautifulSoup

async def corona():
    async with aiohttp.ClientSession() as cs:
        async with cs.get('http://ncov.mohw.go.kr/') as r:
            html = await r.text()

            soup = BeautifulSoup(html, 'lxml')
            data = soup.find('div', class_='liveNum')
            num = data.findAll('span', class_='num')
            corona_info = [corona_num.text for corona_num in num]
            return corona_info

일단 bs4를 당연히 임포트 해줍니다.

그러고 저는 비동기로 요청할것이기 때문에 aiohttp모듈도 임포트 해주고요


일단 질본에 html을가져옵니다.

그리고 해당 html을 뷰티풀 수프로 사용하기위해 넣어주고요

div에 livenum클래스를 가져옵니다.

그 하위 항목에 제가 원하는 값들이있거든요

span에 num을 전부 찾아줍시다.

 해당 항목은 리스트로 나와요

이제 마무리는 리스트 캄프리 헨션스로 숫자만 빼오기!


['(누적)17,399', '14,200', '2,890', '309'] 


와! 잘뽑혀나왔네요!


생각보다 너무 간단해서 제가 제코드를 의심했어요.

예전에 네이버에서 크롤링 해오는 코드와 완전 딴판이라서 저도 놀랬어요


다시 코로나가 늘어나는 추세라서 해당 크롤링을 다시한번 보게되네요


끝!







1개의 댓글

마크러버
2020.08.23

아이고 파이썬 초보인디...

라고내가 말했습니다

좋은 강좌 감사합니당