• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

좋은사람님 답변 부탁드립니다.

18.07.23 13:07 작성 조회수 78

0

from bs4 import BeautifulSoup

import urllib.request as req

import urllib.parse as rep

import sys

import io

import os

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

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

base = "https://search.naver.com/search.naver?where=image&query="

quote = rep.quote_plus("사자")

url = base + quote

res = req.urlopen(url)

savePath ="C:imagedown\"

try:

if not(os.path.isdir(savePath)):

os.makedirs(os.path.join(savePath))

except OSError as e:

if e.errno != errno.EEXIST:

print("폴더 만들기 실패!!!!!")

raise

soup = BeautifulSoup(res, "html.parser")

li_list = soup.select("div.img_area._item > a.thumb._thumb > img")

for i, div in enumerate(li_list,1):

print("div =", div['data-source'])

fullfilename = os.path.join(savePath, savePath+str(i)+'.jpg')

print(fullfilename)

req.urlretrieve(div['data-source'],fullfilename)

print(i)

실행이 안됩니다. 4일째 구글링하면서 방법을 찾고 있지만 더 이상 찾을수가 없어 질문드립니다.

res = req.urlopen(url)

이 부분에서 에러가 납니다.

urlopen이 안되는 것 같은데.

이미 컴퓨터 포맷도 해보고 다시 재설치까지 해봤습니다.

더이상 방법을 알지 못해 글남깁니다.

아래는 오류 코드입니다.

Traceback (most recent call last):

File "C:section22-8-1.py", line 16, in

res = req.urlopen(url)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 163, in urlopen

return opener.open(url, data, timeout)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 472, in open

response = meth(req, response)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 582, in http_response

'http', request, response, code, msg, hdrs)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 510, in error

return self._call_chain(args)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 444, in _call_chain

result = func(args)

File "C:UsersM.KingAnaconda3envssection2liburllibrequest.py", line 590, in http_error_default

raise HTTPError(req.full_url, code, msg, hdrs, fp)

urllib.error.HTTPError: HTTP Error 403: Forbidden

[Finished in 0.474s]

답변 2

·

답변을 작성해보세요.

0

김표만님의 프로필

김표만

질문자

2018.07.31

정말 감사드립니다 ^^

0

안녕하세요. 김민기님

고생 많이 하셨습니다. 결론부터 말씀드리면, 네이버에서 현재 막아놔서 그렇습니다.

소스 코드에

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

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

아래 부분에 아래 코드를 추가하시면 정상적으로 실행됩니다.

opener = req.build_opener()

opener.addheaders = [('User-agent', 'Mozilla/5.0')]

req.install_opener(opener)

설명해드리면, 헤더 정보가 없는 크롤링은 안되도록 네이버가 현재 막아놨습니다.

그래서 위에 코드에 헤더(유저 에이전트) 정보를 심어서 보내면 정상적으로 작동합니다.

포멧까지 하시면 고생하셨습니다.

질문있으시면 쪽지로 주시면 답변이 조금 빠릅니다.

해당 부분은 강의 내용에 추가로 설명해 놓겠습니다.

지금 강의를 듣는 모든 학생들이 전부 안되는 상황이니 빠르게 조치하겠습니다.

좋은 발견해주셔서 감사합니다.