inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기

BeautifulSoup 사용법 및 간단 웹 파싱 실습(2) - 네이버, 인프런

이번강좌 숙제 문의

133

김선명

작성한 질문수 1

0

안녕하세요^^ 항상좋은 강좌 감사합니다.

이번 숙제로 내주신 거 하다가 에러가 나는데^^;; 잘모르겠습니다. 기존 추천 강좌에서 img_list = soup.select("ul.slides")[0] 이부분 가져오는데 평점순은img_list = soup.select("ul.slides")[1],학생수순은 img_list = soup.select("ul.slides")[2] 인덱스를 이용하면 다 가져올거같은데요.

우선 인덱스 순으로 img_list = soup.select("ul.slides")[2] 이렇게 하면 잘가져오는데

평점순 img_list = soup.select("ul.slides")[1] 인덱스 '1'을 사용하면 에러가 납니다.

==== 원본 소스 ===

import sys

import io

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

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

import os

import urllib.request as req

from bs4 import BeautifulSoup as be

import urllib.parse as rep

base = "https://www.inflearn.com/"

quote = rep.quote_plus("추천-강좌")

url = base + quote

res = req.urlopen(url).read()

savePath = "D:/python/Crawling/section2/downimg/"

try:

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

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

except OSError:

if e.errno != errno.EExist:

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

raise

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

img_list = soup.select("ul.slides")[1]

print(img_list)

for i,e in enumerate(imglist,1):

with open(savePath+"text"+str(i)+".txt","wt") as f:

f.write(e.select_one("h4.block_title > a").string)

fullFileName = os.path.join(savePath,savePath+str(i)+'.png')

req.urlretrieve(e.select_one("div.block_media > a > img")['src'],fullFileName)

print("download OK!!")

=== 에러내용 ===

Traceback (most recent call last):

File "D:pythonCrawlingsection2download5-2.py", line 39, in

req.urlretrieve(e.select_one("div.block_media > a > img")['src'],fullFileName)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 188, in urlretrieve

with contextlib.closing(urlopen(url, data)) as fp:

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 163, in urlopen

return opener.open(url, data, timeout)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 466, in open

response = self._open(req, data)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 484, in _open

'_open', req)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 444, in _call_chain

result = func(*args)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 1297, in https_open

context=self._context, check_hostname=self._check_hostname)

File "C:ProgramDataAnaconda3envssection2liburllibrequest.py", line 1254, in do_open

h.request(req.get_method(), req.selector, req.data, headers)

File "C:ProgramDataAnaconda3envssection2libhttpclient.py", line 1107, in request

self._send_request(method, url, body, headers)

File "C:ProgramDataAnaconda3envssection2libhttpclient.py", line 1142, in _send_request

self.putrequest(method, url, **skips)

File "C:ProgramDataAnaconda3envssection2libhttpclient.py", line 984, in putrequest

self._output(request.encode('ascii'))

UnicodeEncodeError: 'ascii' codec can't encode characters in position 26-27: ordinal not in range(128)

부탁드리겠습니다^^;;

python 웹-크롤링

답변 1

0

좋은사람

안녕하세요 선명님 ^^
답변 달아드립니다.
지금 와서 테스트 해보니 올려주신 코드는 소스상에 문제는 전혀 없습니다.
"""
try:
if not (os.path.isdir(savePath)):
pass

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

except OSError as e:
if e.errno != errno.EEXIST:
print("폴더 만들기 실패!")
raise
soup = BeautifulSoup(res, "html.parser")
img_list = soup.select("ul.slides")[0] #0 , 1 , 2 모두 작동 가능
print(img_list)
"""
올려주신 코드는 문제가 없습니다.
UnicodeEncodeError: ‘ascii’ codec can’t encode characters
이 에러 문구(유니코드)는 파일을 쓸 때 나오는 에러 같은데 다른 부분은 정확하게 출력이 된다면,
특별히 소스상에는 문제가 없어보입니다.
39번 라인을 다시 확인해 보시고. 파일 쓰는 부분을 주석 처리 후 콘솔에서만 파싱이 되는지도
천천히 단위테스트 해보세요.
아래 유니코드 관련 에러 처리 링크를 남겨드립니다. 참고하세요.
http://ourcstory.tistory.com/39
정 해결이 안되면, 주말에 원격으로 한 번 봐드릴께요. 천천히 해결해 보아요.
감사합니다.

현재 예제에서 error 발생

0

367

3

유튜브 동영상 다운로드

0

1448

2

Atom 에디터 관련

0

337

1

위시켓 폼데이터

0

274

1

스케줄러 사용 관련 질문 드립니다

0

627

1

selenium 에러

0

428

1

Progress bar 쓰레드 관련

0

489

1

Install Package 관련 문의

0

328

1

tkinter 샘플 코드 실행 오류 건

0

1267

1

4-7-6 네이버 & 카카오 주식 정보 가져오기

0

381

1

네이버자동로그인_by_selenium

0

876

1

위시캣 로그인 처리 및 크롤링 질문

0

345

1

2-8-1 네이버이미지 크롤링 질문

1

604

3

li:nth-of-type 질문

0

350

2

에러가 뜨는데 잘 모르겠어요ㅠ

0

401

2

Install Packages 항목이 안보이는 이유가 뭘까요?

0

401

2

환경변수 Path 설정 방법

0

631

1

웹 브라우저 없는 스크랩핑 및 파싱 실습(1) - 인프런

0

333

1

웹 브라우저 없는 스크랩핑 및 파싱 실습(1) -git주소

0

477

3

download2-8-1. py질문

0

203

1

ip 차단 당하는 거 같은데 아무리 랜덤주고, sleep 줘도 안 되는데 다른 방법 더 있을까요??

0

645

1

인프런 환경이 바뀌어서 제나름대로 하는데

0

196

1

다시올려주신 예제파일로하는데

0

190

1

아직도 에러가뜨나보네요?

0

584

1