본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

인공지능/PYTHON

urllib.request.Request(web_page.url), header모바일은 잘되고 PC버전 다운안되는이유: feat.selenium

홈페이지를 로컬에 파일로 저장

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 의존도가 상대적으로 낮다. 저사양/저속 네트워크 대응이 목적인셈.