인프런 커뮤니티 질문&답변

김제하님의 프로필 이미지
김제하

작성한 질문수

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)

Scraping code 관련 질문

해결된 질문

작성

·

161

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
----------
----------
 
 
# 감사의 인사
 
안녕하세요! 먼저 좋은 강의 만들어주셔서 감사합니다.
파이썬 문법을 기본적인 것을 떼고 프레임워크와 함께 무언가 만들어볼라고 하던 찰나 FastAPI와 함께 크롤링까지 학습할 수 있어서 좋은 강의인 것 같습니다 : )
 
스크랩핑의 경우, json.load 관련하여 학습하다보니 serialize 개념에서 시작하여 json.dump와 json.loads 등등 과 parser 개념에 대해 학습할 수 있어서 너무 좋았습니다. 이것저것 학습하다보니 하루가 쑤욱 갔네요...
 
----------
----------
 
# 질문 1
 
먼저 구글링을 하고 나서 질문드립니다.
 
1) 아래 코드에서 response 앞에 await이 올 수 있는 이유
 
 
async def fetch(session, url):
    print(f"{os.getpid()} | {threading.get_ident()} thread | url: {url}")
    async with session.get(url) as response:
        return await response.text
 
공식 문서에 따르면 await 뒤에는 코루틴, 태스크 또는 퓨처가 와야한다고 하는데, 위 코드에서 await이 올 수 있던 것은 여기서 response가 async with session.get(url)의 alias 여서 가능한건가요???
 
만약 그렇다면 with문은 context manager인 걸로 알고 있습니다. 자원을 할당해주고 다 사용하면 반환하는 역할인 것으로요. 그러면 이 with문이 어째서 코루틴에 속하는지 잘 모르겠습니다.
 
-------
 
# 질문 2
 
2) html.parser
이 질문은 제가 이해한 게 맞는 건지 여쭤보는 질문입니다.
 
beautifulsoup(html, "html.parser") code 부분에서 html을 구문분석할 parser를 "html.parser"로 정한다는 의미인가요?
그리고, HTML parser란 HTML 코드를 읽고 취해서 DOM tree 구조를 생성하는 프로그램이라 이해하면 되나요??
이 부분은 구글링하여 학습했으나, 강사님의 내포하는 지식과 일치하는지 확인받을려는 질문입니다.
 
-------
 
# 질문 3
 
3) await을 넣는 위치
코루틴이란 진입점과 탈출점이 여러 개인 routine인 것으로 이해했고, 그 포인트들이 await과 return으로 만들어진다고 강의를 통해 이해했습니다. 그런데, 왜 이 위치에 await을 썼는가? 라는 의문에는 쉽게 답이 나오지 않는 것 같습니다.
 
from bs4 import BeautifulSoup
import asyncio
import aiohttp


async def fetch(session, url):
    async with session.get(url) as response:
        html = await response.text
        soup = BeautifulSoup(html, 'html.parser')
        cont_thumb = soup.find("div", "cont_thumb")
        for cont in cont_thumb:
            print(cont.find("p", "text_thumb"))
 
위 코드에서 await은 response.text 앞에 있는데요.
await의 위치는 작성자가 임의로 위치할 수 있는 건인지, 아니면 별도로 제가 모르는 내용이 있는 건지 알고 싶습니다.
 
-------
 
#질문 4
 
4) config.py의 get_secret() 질문
get_secret function 매개변수 3개를 key, default_value, json_path 를 입력하셨습니다. json_path의 경우, BASE_DIR를 전역변수로 입력하셨기 때문에 함수 인자로 입력하지 않아도 인식된다고 이해하면 될까요?
 
또한, EnvironmenError의 내용을 보면
 
이 Error 설명을 보면 Base class for I/O related Errors 나와있는데, 왜 I/O 관련 에러인지 모르겠습니다. 
 이 Error는 key에 대한 대체값인 default_value가 없는 경우 발생되는 걸로 이해했습니다.  
CPU가 이 값을 읽는건데 I/O 인가요?
 
그리고, get_secret() 같은 함수를 작성하실 때 어떠한 흐름으로 작성하시는지 궁금합니다.
작성을 하면서 수정하시는 건지, 아니면 처음부터 이 function은 이 역할을 하고, 이 역할을 위해서 별도의 function을 만들고 라는 방식으로 하시는 건지 입문자로서 궁금합니다.
 
-------
 
# 질문 5
 
5) 마지막 질문입니다. 이건 학습 관련 질문입니다.
이번 강의를 마치고, 운영체제와 네트워크 공부를 다시 복습하고, 자료구조와 알고리즘 공부를 할려고 하는데,
프레임워크에 대해서 학습하고 싶습니다. FastAPI를 깊이 공부할지, 아니면 Django를 학습할지 고민입니다. 인프런의 Django 강의를 결제하여 듣고 있으나, 너무 꼼꼼하셔서 그런지 강의가 heavy하네요..ㅠㅠ
어떻게 학습하시는 걸 추천하시나요???
 
 
--------------
--------------
 
질문 읽어주셔서 감사합니다.

 

 

 

답변 1

0

윤상석님의 프로필 이미지
윤상석
지식공유자

답변이 너무 늦었네요.

확인이 늦었습니다.. 죄송합니다.

방금 확인하고 답변을 준비하고 있습니다. 잠시만 기다려주세요!

김제하님의 프로필 이미지
김제하
질문자

위에 질문들 아직 준비 중이신가요...

김제하님의 프로필 이미지
김제하

작성한 질문수

질문하기