- 웹 스크래핑
- 인터넷에서 정보를 가져오는 작업 (구조를 가져오는 것)
- 웹 스크래핑 패키지 : pip install requests bs4
1. 선택자를 사용하는 방법
- 특정 tag에 계속 접근해 데이터를 가져옴
- soup이란 변수 안에 우리가 원하는 html 정보를 전부 가져옴
- 개발자 도구를 통해 데이터 가져옴
* select_one() : 같은 것이 여러개라도 맨 위 데이터 가져옴
* select() : 같은 조건에 있는 태그들을 묶어 리스트로 저장
2. 원하는 데이터의 태그 속성을 잘 살펴보기 (어떤 태그인지 (div 등), 클래스 이름(temperature_text 등))
3. .text를 이용해서 글자 가져오기 (html 태그 데이터)
temp = soup.select_one('.temperature_text')
print(temp.text)
4. contents 명령어로 데이터 뽑아내기
- list 안에 있는 자료를 알아서 쪼개줌
temp = soup.select_one('.temperature_text > strong').contents[1]
- Flask
- 사용자의 요청에 맞춰 HTML 파일을 응답해주는 서버
1. 정해진 폴더 구조가 있음
- templates 폴더는 고정
- 첫 페이지는 보통 index.html을 사용
- app.py 변경 가능 but, 라이브러리와 같은 이름은 불가능
2. 프레임 워크 중 하나
3. render_template : Flask 내장 함수 -> html 파일을 불러 올 수 있음 (임포트 필요)
4. 데이터 넘겨주기
- 원하는 데이터를 변수에 넣고 render_template('index.html', 데이터 이름 = 데이터) 방식으로 코드 추가 -> html에서 정해둔 데이터 이름으로 python 서버의 데이터 사용가능
@app.route('/')
def home():
name = "사나"
return render_template('index.html', data=name)
5. 넘겨준 데이터를 HTML에서 사용 (Python -> HTML)
- {{ 변수명 }} : Python 서버 --데이터--> {{ 변수명 }} -> HTML 사용
6. 여러개 넘겨주기
- key 값에는 HTML에서 사용할 이름 / 값에는 Python 변수 넣기
7. HTML에서 반복문 사용하기
- ffor(자동완성) 사용
<body>
<h1>안녕, {{ data.name }}</h1>
<h2>로또 번호: {{ data.lotto }}</h2> # data.lotto 이 부분에 데이터 넣기
{% for number in data.lotto %}
{{ number }}
{% endfor %}
</body>
- 반복문 + HTML 태그 (ol 태그 : 순서가 있는 리스트)
<body>
<h1>안녕, {{ data.name }}</h1>
<h2>로또 번호: {{ data.lotto }}</h2>
<ol>
{% for number in data.lotto %}
<li>{{ number }}</li>
{% endfor %}
</ol>
</body>
8. 같은 요소의 개수 확인 (교집합 구하기)
@app.route("/")
def home():
name = "사나"
lotto = [16, 18, 20, 23, 32, 43]
def generate_lotto_numbers():
numbers = random.sample(range(1, 46), 6)
return sorted(numbers)
random_lotto = generate_lotto_numbers()
def count_common_elements(list1, list2):
common_elements = set(list1) & set(list2)
return len(common_elements)
common_count = count_common_elements(lotto, random_lotto) # (lotto, random_lotto) 이 부분에 사용하는 요소 넣어주기
context = {
"name": name,
"lotto": lotto,
"random_lotto": random_lotto,
}
return render_template("index.html", data=context)
* 이미 사용중인 주소라고 뜰 때
app.run('0.0.0.0', post = 5001, debug=True) : 5001 부분에 숫자 바꿔주기
* 이미지 삽입 : static(폴더 생성, 고정) -> image(폴더 생성) -> 사진 넣기
* url_for('경로') : 위치를 나타 낼 때 사용
9. 검색어 받아오기
- request.args.get('name 속성명') : form에서 입력한 데이터를 받아 올 수 있음(request 임포트 해줘야함)
10. 검색 데이터 받아오기
- pip install requests 설치
import requests
@app.route("/movie")
def movie():
query = request.args.get('query') # 검색어
URL = f"http://kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.json?key=f5eef3421c602c6cb7ea224104795888&movieNm={query}" # URL
res = requests.get(URL) # url을 요청한다.
rjson = res.json()
movie_list = rjson["movieListResult"]["movieList"]
return render_template("movie.html", data=movie_list)
보완해야 하는 부분 / 아쉬웠던 점
뭔가 한참 건너 뛰고 배운 느낌이 강하게 들었다.
flask 사용하는 부분도 보면 이해가 되지만 막상 코드를 짜려니 어려웠다.
그래서 챗 gpt에 따로 예제를 받아서 공부했다.
'항해99' 카테고리의 다른 글
[항해99] WIL 24.02.04 (1) | 2024.02.05 |
---|---|
[항해99] 웹 개발 종합반 4주차 : DB / Project (0) | 2024.02.05 |
[항해99] 항해99 입학시험 후기 (0) | 2024.02.01 |
[항해99] 웹 개발 종합반 2주차 : Javascript (0) | 2024.02.01 |
[항해99] 웹 개발 종합반 1주차 : 프론트엔드 (1) | 2024.02.01 |