| 번호 | 주제 | 내용 |
|---|---|---|
| 1 | 웹 크롤링 | - robots.txt - requests 라이브러리 → GET/POST 요청 데이터 수집 - BeautifulSoup 라이브러리 |
| 2 | HTML | - 구성 요소 - 태그 |
- 웹사이트에서 데이터를 자동으로 가져오는 기술
- 검색 엔진도 크롤링 및 스크래핑을 활용하여 정보 수집
crawling?
: 여러 웹페이지를 탐색하면서 정보 추출
scraping?
: 특정 웹페이지에서 필요한 데이터만 추출함
- 액세스 하거나 정보수집이 가능하는 페이지등을 알려주는 .txt파일
- 검색엔진은 해당 txt 내용을 기반으로 허용되지 않는 페이지로부터 정보수집을 원칙적으로 하지 않음
- 웹페이지 데이터를 가져오기 위한 HTTP 요청 라이브러리
- GET , POST 요청을 사용하여 데이터 수집!
| 구분 | GET 방식 | POST 방식 |
|---|---|---|
| 데이터 전송 방식 | URL에 데이터를 포함하여 전송 (쿼리스트링) | HTTP 메시지 본문(Body)에 데이터를 포함 |
| URL 표시 여부 | 데이터가 URL에 표시됨 | 데이터가 URL에 표시되지 않음 |
| 보안성 | 낮음 (데이터가 URL에 노출됨) | 높음 (데이터가 본문에 숨겨짐) |
| 전송 데이터 크기 제한 | 브라우저 및 서버에 따라 제한 존재 (약 2048자) | 상대적으로 큰 데이터 전송 가능 |
| 용도 | 데이터 조회, 검색 등 (읽기 전용 요청) | 로그인, 회원가입, 파일 업로드 등 (데이터 변경 요청) |
| 멀티파트 전송 | 지원하지 않음 | 지원함 (파일 업로드 등 멀티파트 데이터 전송 가능) |
| 속도 | 빠름 (간단한 데이터 전송) | 상대적으로 느림 (본문 처리 필요) |
| Idempotent (멱등성) | 예 (같은 요청을 반복해도 결과가 동일함) | 아니오 (같은 요청이라도 결과가 달라질 수 있음) |

1) 200 : 요청 성공
2) 404: Not Found 페이지 없음
3) 403: Forbidden 접근금지
4) 500: internal Derver Error 서버오류
| 속성 / 메서드 | 설명 |
|---|---|
| response.text | 응답 본문을 문자열(str)로 반환 |
| response.content | 응답 본문을 바이트(bytes)로 반환 |
| response.json() | 응답 본문을 딕셔너리(dict)로 반환 |
- HTML/XML을 파싱하여 데이터를 추출하는 라이브러리
- find()와 find_all()메서드를 활용하여 특정 태그 검색 가능!
- find() : 특정 태그에서 첫 번째 요소 가져오기
- find_all(태그) : 특정 태그에서 모든 요소 가져오기
- select() : 선택자를 활용해 데이터 가져오기


1) 네이버

2) 롯데리아

현재 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트
HTTP ( Hyper Text Transfer Protocol)?
: 인터넷에서 하이퍼 텍스트 문서를 교환하기 위하여 사용되는 통신규약
HTML(Hyper Text Markup language)?
: 웹 페이징에 정보를 담아 표시하기 위한 마크업 언어
1) 주어진 결과물을 보고 똑같이 만들어보기!! ( 성공!)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- CSS 만들기 위한 style 태그 생성!! -->
<style>
/* 모든 th에 적용할 스타일 정의 */
th{
background: gray;
height: 50px;
text-align: left;
}
tr{
background: whitesmoke;
height: 35px;
}
/* class = section 클래스에 적용하자 */
.section{
text-align: right;
}
/* id = exam1에 적용하자*/
/* id는 고유하므로 html하나에 중복되지 않게 적용하자!! ...가능은 하나 웹배포 X*/
#exam1{
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<h3>테이블 실습</h3>
<!-- Ctrl + A로 전체 블록 -->
<!-- Ctrl + K, F : 정렬 -->
<form action="" method="get">
<table>
<tr>
<th colspan="2">Step 1 : 아이디/비번 입력</th>
</tr>
<tr>
<td class="section">아이디</td>
<td><input type="text"></td>
</tr>
<tr>
<td class="section">비밀번호</td>
<td><input type="password"></td>
</tr>
<tr>
<td class="section">비밀번호 확인</td>
<td><input type="password"></td>
</tr>
<tr>
<th colspan="2">Strp2 : 개인정보</th>
</tr>
<tr>
<td class="section">성별</td>
<td>남 <input type="radio" name="gender"> 여 <input type="radio" name="gender"> </td>
</tr>
<tr>
<td class="section">혈액형</td>
<td>
<select>
<option>A형</option>
<option>B형</option>
<option>O형</option>
<option>AB형</option>
</select>
</td>
</tr>
<tr>
<td class="section" id="exam1">생일</td> <!-- id를 태그를 부여-->
<td><input type="date"></td>
</tr>
<tr>
<th colspan="2">Step3 : 선호도</th>
</tr>
<tr>
<td class="section">취미</td>
<td>
축구 <input type="checkbox">
야구 <input type="checkbox">
농구 <input type="checkbox">
</td>
</tr>
<tr>
<td class="section">좋아하는 색깔</td>
<td><input type="color"></td>
</tr>
<tr>
<th colspan="2">Step4 : 적고 싶은 말</th>
</tr>
<tr>
<td colspan="2">
<textarea cols="56" rows="5"></textarea>
</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<input type="submit" value="제출">
<input type="reset" value="초기화">
</td>
</tr>
</table>
</form>
</body>
</html>
2)

3)

4)

5)

6)

7)
