인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

gmg04051235's profile image
gmg04051235

asked

Introduction to Python and Creating Various Automated Applications Using Web Crawling

Extracting Necessary Data from the Web Using Python urllib (2)

urllib을 활용한 데이터 추출하기(2) 과제 질문한번더 합니다

Written on

·

140

0

한번더 질문 드립니다.

import sys

import io

import urllib.request as dw

from urllib.parse import urlencode

sys.stdout=io.TextIOWrapper(sys.stdout.detach(),encoding=’utf-8′)

sys.stderr=io.TextIOWrapper(sys.stderr.detach(),encoding=’utf-8′)

N_bannerUrl1=" https://nv.veta.naver.com/fxshow"

value1={

‘su’:’SU10079′

}

value2={

‘calp’:’1′

}

value3={

‘nrefreshx’:’1′

}

param1=urlencode(value1)

param2=urlencode(value2)

param3=urlencode(value3)

Naver_bannerUrl1=N_bannerUrl1+’?’+param1+’&’+param2+’&’+param3

print(Naver_bannerUrl1)

savePath1="d:/Web crowling study/section2/naver_banner1.jpg"

reqData1=dw.urlopen(Naver_bannerUrl1).read()

with open(savePath1,’wb’) as savefile1:

savefile1.write(reqData1)

Naver_bannerUrl2=" https://ssl.pstatic.net/tveta/libs/1226/1226129/0744cf34170d945cfd3f_20190118132726901.jpg"

savePath2="d:/Web crowling study/section2/naver_banner2.jpg"

reqData2=dw.urlopen(N_bannerUrl2).read()

with open(savePath2,’wb’) as savefile2:

savefile2.write(reqData2)

print("다운로드완료!")

서버측에서 변경되는 타이밍에 가져와서 빈 이미지 파일이 생성되는것 같다고 하셨는데

위 코드에서 네이버 왼쪽 베너 즉 Naver_bannerUrl1 경우에 직접jpg Url이 아닌 상위 url을 이용해서

왼쪽베너가 갱신되면 , 코드를 실행하였을 때 갱신된 이미지를 저장할 것이라고 생각했습니다.

왼쪽 베너는 브라우저를 보고있을 때 갱신 속도가 아주 느려서 같은 이미지가 왼쪽 베너에 오래동안 유지됩니다.

이럴경우는 우연히 서버측에서 변경되는 타이밍에 가져와서 그런것은 아니지 않나요?

이미지가 변경되는 타이밍에 저장이되서 그렇다면 이미지 갱신주기가 매우 짧아서 그 주기와 저장시기가 맞아야

하는것이라고 생각이들어서 다시 여쭤봅니다.

또 섹션 2에서 selenium 수업이 없는것 같습니다. beautifulsoup 강의는 있습니다.

웹-크롤링python

Answer 1

0

niceman님의 프로필 이미지
niceman
Instructor

답변드립니다.
현재 보내주신 코드 전체를 제가 리뷰 한 후 답변을 드릴 수 없는 관계로 정확한 소스코드를 리뷰하지는 않았습니다.
보통은 타이밍 문제에서 빈 파일이 생성되는 경우는 많습니다.
그리고 받고자 하는 이미지 2장 full url 정보를 복잡하게 작성하는 것 보다는
imgUrl1
imgUrl2
선언해서
형식으로 각각 테스트 해보시기 바랍니다.
또한 실제 브라우저가 아닌 경우에는
서버측에서 1. 브라우저에 내장되어 있는 pdf 뷰어가 있는지 여부

  1. fake-header 정보를 가졌는지 여부

를 체크해서 부가 정보를 Response 하지 않는 방법도 취하고 있습니다
저라면 이미지 url을 가지고 base64 구문으로 print문으로 출력해보고 단위테스트를 진행할 것같습니다.
https://stackoverflow.com/questions/43926563/how-to-read-bytes-from-a-image-url-jpeg-and-encode-in-base64-on-python-2-7?rq=1
섹션3에서 Selenium 수업이 있습니다.
아울러, 답변이 늦어질 수 있으니 급한 질문은 쪽지로 보내주세요.

gmg04051235's profile image
gmg04051235

asked

Ask a question