4.9 Recap
for 반복문은 sequence 안의 각 item 으로 코드를 실행시킬 수 있는 방법이다.
from requests import get
websites = (
'google.com',
'https://airbnb.com',
'facebook.com',
'https://naver.com'
)
results ={}
for website in websites:
if not website.startswith('https://'):
website = f"https://{website}"
response = get(website)
if response.status_code == 200:
results[website] = "OK"
else:
results[website] = "FAILED"
print(results)
from requests import get → requests 모듈사용, get 기능 사용 ( get은 1개의 url을 받고 웹사이트를 가져온다 )
websites 라는 튜플 안에 구글, 에어비엔비, 페이스북, 네이버 URL 넣음, https 있는것도 있고 없는것도 있고,
results ={} → results 라는 빈 딕셔너리 생성
for website in websites: → website 변수로 websites 안의 구글,에어비엔비,페이스북,네이버 등 아이템을 반복할거다.
for potatos in websites: → potatos 변수로 websites 안의 구글,에어비엔비,페이스북,네이버 등 아이템을 반복할거다.
website 라는 변수는 관습적으로 사용할 뿐 변수명은 사용자가 마음대로 정하면된다.
for website in websites:
if not website.startswith('https://'): → website 의 시작문자가 https:// 가 아니면
website = f"https://{website}" → webstie 에 https://website 를 넣어라 ( https:// 문자를 붙여서 넣어라 )
'google.com',
'facebook.com',
위에 두개 url 은 https:// 문자가 앞에 없으니 붙여서 website 변수에 저장된다.
response = get(website) → get 사용해서 website 불러온것을 response 변수에 넣어라
if response.status_code == 200: → response 로 불러온 값의 웹사이트 HTTP 상태코드가 200 (정상) 이면
results[website] ="OK" → results 라는 딕셔너리에 website 는 key 로, OK 는 value 값으로 넣어라 (추가해라)
results[website] == results['https://google.com'] 라고 생각하면 된다.
구글,에어비엔비,페이스북,네이버가 돌아가면서 들어간다.
else: → 아니면
results[website]="FAILED" → results 라는 딕셔너리에 website 는 key 로, FAILED 는 value 값으로 넣어라 (추가해라)
print(results) 해서 results 딕셔너리 출력하면
{'https://google.com': 'OK', 'https://airbnb.com': 'OK', 'https://facebook.com': 'OK', 'https://naver.com': 'OK'}
'https://google.com' 이라는 key 값과
OK 라는 value 값이 나온다.
각각 다른 웹사이트들의 상태가 key 와 value 로 출력된다.
4개 url 모두 https 가 붙은 정상 url 이므로 OK 값이 key로 출력된다.
for 문 안의 코드가 websites 튜플의 아이템에 각각에 대해 총 4번 실행되면 results 라는 딕셔너리에 상태값과 함께 출력된다.
챌린지
response 는 여러 상태 코드가 있다.현재 코드는 200이 아니면 전부 에러라고 생각한다.
각각 상태코드에 맞는 반응들을 출력하는 코드를 작성해본다.
from requests import get
websites = (
'google.com',
'https://airbnb.com',
'facebook.com',
'https://naver.com',
'https://daum.net'
)
results = {}
for website in websites:
if not website.startswith('https://'):
website = f"https://{website}"
response = get(website)
if 100 <= response.status_code < 200:
results[website] = "Information reponse"
elif 200 <= response.status_code < 300:
results[website] = "Success"
elif 300 <= response.status_code < 400:
results[website] = "Redirect"
elif 400 <= response.status_code < 500:
results[website] = "Client Error"
elif 500 <= response.status_code < 600:
results[website] = "Server Error"
print(results)
혹은 status_number 라는 변수를 추가로 만들어서 startswith 메서드를 사용하여 시작 숫자로 판별하여 출력 할 수 있다.
from requests import get
websites = (
'google.com',
'https://airbnb.com',
'facebook.com',
'https://naver.com',
'https://daum.net'
)
results = {}
for website in websites :
if not website.startswith("https://"):
website = f"https://{website}"
response = get(website)
status_number = str(response.status_code)
if status_number.startswith("1"):
results[website] = "Information reponse"
elif status_number.startswith("2"):
results[website] = "Success"
elif status_number.startswith("3"):
results[website] = "Redirect"
elif status_number.startswith("4"):
results[website] = "Client error"
else :
results[website] = "Server Error"
print(results)
실제 사이트 말고 http 상태코드를 입력하면 그 값을 반환해주는 사이트가 있어 사용해보았다.
from requests import get
websites = (
'httpstat.us/101',
'httpstat.us/202',
'httpstat.us/303',
'httpstat.us/404',
'httpstat.us/505',
)
results = {}
for website in websites :
if not website.startswith("https://"):
website = f"https://{website}"
response = get(website)
status_number = str(response.status_code)
if status_number.startswith("1"):
results[website] = "Information reponse"
elif status_number.startswith("2"):
results[website] = "Success"
elif status_number.startswith("3"):
results[website] = "Redirect"
elif status_number.startswith("4"):
results[website] = "Client error"
else :
results[website] = "Server Error"
print(results)
출력값:
{'https://httpstat.us/101': 'Information reponse', 'https://httpstat.us/202': 'Success', 'https://httpstat.us/303': 'Success', 'https://httpstat.us/404': 'Client error', 'https://httpstat.us/505': 'Server Error'}
각 상태코드에 맞는 출력값이 나왔다.
'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글
Python BeautifulSoup (0) | 2022.11.17 |
---|---|
Python WebScrapper Introduction (0) | 2022.11.16 |
Python Requests (0) | 2022.11.14 |
Python For Loops (0) | 2022.11.11 |
Python List, Tuple, Dict 복습 (0) | 2022.11.10 |