웹 이미지 크롤링 질문입니다.
조회수 670회
안녕하세요.
파이썬 웹크롤링을 공부 하는데 있어서 findall
함수를 쓰다가 F12 > ctrl + shift + c
이후
html구조에 무엇을 넣어야할지 잘 몰라
질문드립니다.
사이트는 https://chilgok.fowi.or.kr/facility/admin.do
이구요.
제가 넣으려고 하는 사진코드는<img src="/images/facility/admin photo05.jpg alt="도서관 썸네일">
코딩은 다음과같습니다
import urllib.request as req
import re
rep = req.urlopen('https://chilgok.fowi.or.kr/facility/admin.do')
data = rep.read().decode('utf8')
result = re.findall(' +.jpg', data) ######## 이부분에 무엇을 넣어야할지 모르곘습니다.
for link in result:
idx = link.rfind('/')
with open(link[idx+1:], "wb") as f:
pic = req.urlopen(link)
f.write( pic.read() )
출처: https://www.youtube.com/watch?v=NKE0ozQ1Esw
상업적으로는 절대 사용하지 않습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
해당 사이트는 jsp를 사용해서 만들어졌고 상대경로를 쓰기 때문에 동영상처럼 전체 경로로 바로 받아오실 수는 없습니다.
확인해보니 이미지가 저장된 장소는 https://chilgok.fowi.or.kr 이후로 불러와야 하는것으로 보여 코드를 다소 수정하였습니다.
추가로, 해당 사이트에 urllib로 접속 시 https 보안 때문인지 접속이 안되기에 ssl을 추가하였습니다.
아래는 코드 전문입니다.
import urllib.request as req import re import ssl context = ssl._create_unverified_context() url = 'https://chilgok.fowi.or.kr' active = '/facility/admin.do' rep = req.urlopen(url+active,context=context) data = rep.read().decode('utf8') result = re.findall('/images.+jpg', data) # 정규표현식 "/images"텍스트 + 아무 글자 1개 이상 + "jpg"텍스트 # "/images/facility/admin_photo01.jpg" 이미지가 상대경로로 되어있기 때문에 루트 경로를 찾으셔야 합니다. 이 경우 "https://chilgok.fowi.or.kr" for link in result: print(url+link) # 루트 경로 + 상대경로 imgUrl = url + link idx = imgUrl.rfind('/') fileName = imgUrl[idx+1:] print(fileName) # 중간에 에러가 난다면 어디까지 정상적인 값을 받아오는지 체크해보시기 바랍니다. with open(fileName, "wb") as f: pic = req.urlopen(imgUrl,context=context) # 여기도 (https - ssl) f.write( pic.read() )
ctrl + shift + c 몰랐는데 좋은걸 알았네요.
웹크롤링에 대해 더 알아보시려면 BeautifulSoup도 참고해보시기 바랍니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 저는 아직 남에코드 배껴쓰는정도밖에 할줄모르는데 코딩을 스스로 하시는분들 보시면 정말 대단한 것 같아요. 정말 대박입니다. 감사합니다 ㅠㅠ!! 알 수 없는 사용자 2020.7.17 09:59
-
댓글 입력