웹 이미지 크롤링 질문입니다.

조회수 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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)