간단한 코드 질문 ..

조회수 497회

여러모로 파이썬을 배우고 있는 파린이 입니다..

현재 사용중인 프로그램이 한 개 있는데요, 수정을 하고 싶은 부분이 있는데, 잘 되지 않아 질문 드립니다.

우선 현재 사용중인 프로그램코드 입니다. 프로그램 목적은 밑 결과갚을 보시면 아시다시피, 원하는 URL 을 입력하면, 이미지 파일의 PATH를 뽑아오는 프로그램인데요, 현재 하기에 명시된 결과값에서

Image: https://c1.staticflickr.com/5/4005/34867024234_53b7383815_s.jpg 의 경우 외부 URL 이기때문에, 맨 https 부터, URL 전체를 표시해 주는데요 ,

/Image: assets/bi-programmers-dark-52dd3a63ce83b85f0d3a11a3deefc153ce4f012b7ff7dc01d71a589199ab6923.png 의 경우 제가 리퀘스트를 받아오는 도메인과 동일한 도메인이기 때문에 앞의 URL 부분이 생략되어있는데요, 이부분 을 표시하고 싶습니다. 그래서 if 문을 사용해서, http 부분이 없으면, link를 추가해라 라고 하고 싶은데, 잘 안되네요 ㅜ

현재 사용중인 프로그램 코드 입니다.


def scraper(link):
    res = requests.get(link)

    for image in BeautifulSoup(res.text, 'html.parser', parse_only=SoupStrainer('img')):
        src = image.get('src')
        print('Image: ' + str(src))


def create_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('link', help='url of page to scrape')
    return parser


def main(args):
    parser = create_parser()
    args = parser.parse_args(args)
    url = args.link
    return scraper(url)


if __name__ == '__main__':
    main(sys.argv[1:])

결과 값


Image: /assets/bi-programmers-dark-52dd3a63ce83b85f0d3a11a3deefc153ce4f012b7ff7dc01d71a589199ab6923.png
Image: /assets/bi-symbol-dark-c220f888ccd0fd2603f00300cb54bb88d0246bd239c974a637147a4f26fac3d2.png
Image: https://c1.staticflickr.com/5/4005/34867024234_53b7383815_s.jpg
Image: https://farm5.static.flickr.com/4134/4741286721_8770fe8879_s.jpg
Image: https://farm5.static.flickr.com/4093/4741286719_e4fa9ec414_s.jpg
Image: https://farm5.static.flickr.com/4081/4741286717_1e1a8ff4da_s.jpg
Image: https://farm5.static.flickr.com/4142/4741286715_ac0d603b07_s.jpg
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 아래 참고하세요.

    import requests, bs4
    
    _url = 'http://www.kldp.org'
    
    content = requests.get(_url).content
    imgs = bs4.BeautifulSoup(content, 'html.parser', parse_only=bs4.SoupStrainer('img'))
    img_urls = (img['src'] if img['src'].startswith('http') else f"{_url}{img['src']}" for img in imgs) # 이미지 url 의 시작이 http 가 아니면 요청 url 을 추가합니다.
    
    for url in img_urls: print(url)
    
    • 헉 ㅜㅜ 항상 감사합니다. 알 수 없는 사용자 2019.12.23 21:30
    • 제 머리가 도저히 따라 주지를 않아서 한번 더 질문 드려요 .. 저는 파이썬 2를 사용해서 위 소스코드는 적용이 안되서 변형을 해서 적용하는데 계속 에러가 나오네요 .. 알 수 없는 사용자 2019.12.24 01:31
    • # coding: utf-8 import requests import argparse from bs4 import BeautifulSoup, SoupStrainer import sys import re def scraper(link): res = requests.get(link) for image in BeautifulSoup(res.text, 'html.parser', parse_only=SoupStrainer('img')): src = image.get['src']if img['src'].startswith('http') else link + img['src'] for img in image print('Image: ' + str(src)) def create_parser(): parser = argparse.ArgumentParser() parser.add_argument('link', help='url of page to scrape') return parser def main(args): parser = create_parser() args = parser.parse_args(args) url = args.link return scraper(url) if __name__ == '__main__': main(sys.argv[1:]) 알 수 없는 사용자 2019.12.24 01:31
    • 혹시 어떻게 수정을 해야 할까요 ㅜㅜ 알 수 없는 사용자 2019.12.24 01:31
    • img_urls = (img['src'] if img['src'].startswith('http') else "{}{}".format(_url, img['src']) for img in imgs) 로 수정하면 됩니다. 3.6부터 f'' 시작하는 interpolation 이 지원됩니다. 정영훈 2019.12.24 07:51

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

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

(ಠ_ಠ)
(ಠ‿ಠ)