인프런 커뮤니티 질문&답변

홍태경님의 프로필 이미지
홍태경

작성한 질문수

빅데이터 파이프라인 마스터; 성공을 위한 도구와 기술

[실습1] Crawling Recursive Way

섹션2 실습1 코드 공유 문의..

해결된 질문

작성

·

256

·

수정됨

0

안녕하세요 강사님..

 

실습 1번은 현재 저로서는 해석이 불가능하여

해석은 나중에 하기로 하고

일단 쳐보기만 열심히 쳐봤는데 역시나 안되네요..

코드 공유좀 부탁 드릴 수 있을까요..

 죄송합니다

from bs4 import BeautifulSoup
from urllib.request import *
from urllib.parse import *
from os import makedirs
import os.path, time, re

proc_files = {}

def enum_links(html, base):
    soup = BeautifulSoup(html, "html.parser")
    links = soup.select("link[rel='stylesheet']") # CSS
    links += soup.select("a[href]") # link
    result =[]

    for a in links :
        href = a.attrs['href']
        url = urljoin(base, href)
        result.append(url)
    return result

def download_file(url):
    o = urlparse(url)
    savepath = "./" + o.netloc + o.path
    if re.search(r"/$", savepath):
        savepath += "index.html"

    savedir = os.path.dirname(savepath)

    if os.path.exists(savepath): return savepath

    if not os.path.exists(savedir):
        print("mkdir=", savedir)
        makedirs(savedir)

    try:
        print("download=", url)
        urlretrieve(url, savepath) # url 다운 받고 파일 이름은 savepath로 저장 
        time.sleep(1)
        return savepath
    except:
        print("다운 실패", url)
        return None


def analyze_html(url, root_url):
    savepath = download_file(url)
    if savepath is None: return
    if savepath is proc_files: return
    proc_files[savepath] = True
    print('analyze_html', url)

    html =open(savepath, "r", encoding="utf-8").read()
    links = enum_links(html, url)
    for link_url in links:

        if link_url.find(root_url) != 0:
            if not re.search(r".css$", link_url): continue

        if re.search(r".(html|htm)$", link_url):
            analyze_html(link_url, root_url)
            continue

        download_file(link_url)


if __name__ == "__main__":
    url = "https://docs.python.org/3.5/library/"
    analyze_html(url, url)

답변 3

0

메일 보내드렸습니다.

선수지식관련해서 제안해드린 내용 고민해보시고 추후 피드백 부탁드립니다.

감사합니다.

0

안녕하세요 홍태경님,

 

사실 강의자료에 나와있는 코드를 그대로라도 직접 코딩해보면서 공부하길 원했던 내용인데, 메일 주소 하나 알려주시겠어요? 제가 출장 마치고 돌아오는 길에 피드백 드리겠습니다

홍태경님의 프로필 이미지
홍태경
질문자

0

안녕하세요, 인프런 AI 인턴입니다.
제공해 주신 정보에 따르면 프로그래밍 관련 질문에 대한 답변을 제공하는 것이 목표입니다. 하지만 안타깝게도 제공된 정보에는 강의 자료 다운로드, 계정 관련 문의, 강의 수강 증빙 방법 및 서비스 오류 해결 방법에 관한 내용만 포함되어 있어, 질문하신 코드 공유 요청에 직접적으로 답변드리기 어렵습니다.

원하는 답변을 찾지 못하셨다면, 인프런 홈페이지의 FAQ 섹션을 참조하거나, 웹사이트 내 ‘문의하기’ 기능을 통해 직접적으로 강사나 운영진에게 연락을 취하는 것이 좋을 것 같습니다.

감사합니다.

홍태경님의 프로필 이미지
홍태경

작성한 질문수

질문하기