이번강좌 숙제 문의
133
작성한 질문수 1
안녕하세요^^ 항상좋은 강좌 감사합니다.
이번 숙제로 내주신 거 하다가 에러가 나는데^^;; 잘모르겠습니다. 기존 추천 강좌에서 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)
부탁드리겠습니다^^;;
답변 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





