홈페이지를 로컬에 파일로 저장
open 파일 객체를 생성
write 파일데이터 입력
close 종료
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36'}
request = urllib.request.Request(web_page.url, headers=header)
data = urllib.request.urlopen(request).read()
f = open("test.html", "wb")
f.write(data)
f.close()


header를 추가해 모바일용도 다운받을 수 있다.
header = {'User-Agent': 'Mozilla/5.0 (iPhone)'}
request = urllib.request.Request(web_page.url, headers=header)
data = urllib.request.urlopen(request).read()
f = open("test_m.html", "wb")
f.write(data)
f.close()

왜 모바일은 잘나올까?
우선 결론적으로 pc도 잘나오려면 urllib가 아닌 selenium을 사용해야한다.
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(web_page.url)
data = driver.page_source
with open("test2.html", "w", encoding="utf-8") as f:
f.write(data)
왜그럴까?
우선 console 확인..
에러를 확인해보자.
Access to script ... blocked by CORS policy
브라우저에서 JS 실행이 막힌 것. HTML 다운로드 자체가 실패한 게 아니다.
또 pc, mobile에서 모두 일어나는 에러.


Naver 메인 페이지는 구조가 HTML은 껍데기, JS가 실행되면서 검색창/광고/컨텐츠를 “나중에 생성”된다.
네이버는 내부적으로: “모바일 전용 서버 렌더링 HTML”을 주기때문.
이는 렌더링 전략 차이로
pc버전은 비교적 고성능이고 js를 많이 써도 큰 문제가 없다. 최소구조만 주고, js가 실행되며 화면이 구성된다면
mobile버전은 느린 네트워크를 고려해야하고 빠른 초기 렌더링이 필요하다.
서버에서 이미 렌더링 된 html을 더 많이 포함해 js 의존도가 상대적으로 낮다. 저사양/저속 네트워크 대응이 목적인셈.