이미지를 크롤링하여 다운로드 할때 생기는 오류
조회수 1792회
Yes24 사이트에서 책들의 이미지 url을 크롤링하고 이미지를 저장하려고 합니다.
크롤링을 하다 보면 img src
에 .jpg
가 들어가 있는 것도 있고 들어가 있지 않는 것도 있을 때 어떻게 해야 둘다 다운을 받을 수 있나요?
아래와 같은 코드를 사용하였지만 .jpg
가 들어가 있지 않은 파일들은 다운받아지다가 .jpg
가 들어간 파일이 나오면 에러가 발생하며 중단됩니다.
book_img = soup.find_all('em', {'class': 'imgBdr'})
img_url = book_img[0].find('img')['src']
print(img_url)
b_img_url.append(img_url) # 이미지 url을 찾아서 리스트에 추가
if '.jpg' in str(img_url):
img = img_url
else:
img = img_url + '.jpg'
img_name = book_img[0].find('img')['alt']
urllib.request.urlretrieve(img, "yes24_2018,2019/" + img_name.replace("/", ",").replace('"', "'").replace(":", "-").replace(">", ")").replace("<", "(").replace("?", "").strip() + '.jpg') # 이미지를 저장
에러는 다음과 같습니다.
urllib.error.HTTPError: HTTP Error 404: Not Found
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
import requests from bs4 import BeautifulSoup as bs def filesave(url): try: urlsplit = url.split('/')[-1] name = 'C:/Users/User/hi/'+urlsplit bn = requests.get(url).content if bn[0:3] != b'\xff\xd8\xff': print('this file is not JPEG file format') return 0 else: if 'jpg' not in urlsplit: name += '.jpg' f = open(name,'wb') f.write(bn) f.close() print(f'[!] {name} saved') return name except Exception as e: print(e) return 0 def imgsrc(url): s = bs(requests.get(url).text, 'html.parser') img = s.find('div', {'class':'gd_imgArea'}) if img is not None: return img.span.em.img['src'] else: return None url1 = 'http://www.yes24.com/Product/Goods/58397337' url2 = 'http://www.yes24.com/Product/Goods/58412700' filesave(imgsrc(url1)) filesave(imgsrc(url2))
참고해주세용 file signature 식별하는건 생략해도 되요.
댓글 입력