[파이썬] newspaper 모듈로 뉴스 스크래핑하기

반응형
    반응형

    newspaper 모듈 소개

    뉴스 스크래핑 하는 방법은 많습니다. 일반적으로 셀레니움이나 requests 써도 되는데 편리함을 추구하는 사람으로써 newspaper를 써봤습니다. (좀... 늦었나?)

    newspaper는 사용자가 지정한 url에서 text를 추출해주는 모듈입니다. 그러니깐 뉴스말고 웹 전체를 다 텍스트화 한다고 생각하시면 됩니다. 이미지랑 동영상도 가능합니다. 이미지는 다 되는데 동영상은 일부 안 되는 경우도 있습니다.

    자세한 내용은 newspaper 공식 가이드에서 확인할 수 있습니다.

    가이드 사이트 첫 부분.. 시작부터 추천글을?

    Newspaper 설치

    지금도 python2를 쓰는 분이 있나봅니다. newspaper 설치를 그냥 하면 python2 버전으로 설치되서 python3에서는 안됩니다.

    # python2
    pip install newspaper
    
    # python 3
    pip install newspaper3k

    newspaper 모듈로 기사 스크래핑하기

    newspaper 모듈을 사용하여 기사를 추출하는 방법은 매우 간단합니다.  최신기사 가져오는 방법으로 예를 들겠습니다. 예를 들어, CNN 웹사이트의 최신 기사 10개를 추출해보겠습니다.

    import newspaper
    
    cnn_paper = newspaper.build('http://cnn.com')
    for article in cnn_paper.articles[:10]:
        print(article.url)

    위 코드에서는 newspaper.build() 함수를 사용하여 CNN 웹사이트를 빌드합니다. 그리고 cnn_paper.articles를 사용하여 해당 웹사이트의 모든 기사를 추출할 수 있습니다. 위 코드에서는 최신 기사 10개만 추출하도록 설정하였습니다.

    기사 내용 추출하기

    기사의 URL을 사용하여 해당 기사의 내용을 추출할 수 있습니다. 이때, newspaper 모듈은 자동으로 해당 기사의 내용을 가져와 파싱합니다. build는 새로운 기사를 찾아주는 것이기 때문에 한번 내가 봐버리면 더이상 새로운 기사가 아니게 됩니다. 즉, 잘못해서 날려버리면 다시 돌아오지 않습니다. 왜냐하면 나는 이미 봐버렸기 때문이죠. 아무튼 New의 의미를 생각하면 호출을 잘 해야합니다.
    해당 사이트에서 새 기사로 등록을 안해놓으면 없을수도 있습니다. 아무튼 build로는 최신이라는 것만 가져올 수 있으니 무조건 가져오는 것은 아닙니다.

    참고를 위해 다시 불러보았습니다. 이미 앞에 있던 10개는 온데간데 없고 2개만 나왔습니다. 그것도 이미 가져왔던 링크와는 다른 링크입니다.

    cnn_paper = newspaper.build('http://cnn.com')
    url = []
    for article in cnn_paper.articles[:10]:
        url.append(article.url)
        article.download()
        parse = article.parse()
        print(article.text[:200])
        print(article.top_image)
        print(article.movies)

    위 코드에서는 article.download() 함수를 사용하여 해당 기사의 내용을 다운로드하고, article.parse() 함수를 사용하여 기사의 내용을 파싱합니다. 이 순서로 하지 않으면 parsing이 안 됩니다. 그 후에 article.text를 사용하여 기사의 텍스트를 출력합니다. article.top_image는 기사 맨 위의 그림을 가져올 수 있고 동영상이 있다면 그것도 가져옵니다.

    사실 위 기사는 동영상이 있는데도 가져오지 못했습니다. newspaper의 단점이기도 한데 동적인 경우 못 가져옵니다. 댓글도 그래서 못가져옵니다.
    이를 가져오게 하려면 동작처리도 가능한 셀레니움이나 Beautifulsoup 이용을 해줘야 합니다.

    마치며

    newspaper 모듈을 사용하여 웹 스크래핑하는 방법을 알아보았습니다. 이 모듈을 사용하면 매우 쉽고 간편하게 웹페이지에서 기사를 추출할 수 있습니다. 하지만, 간편한만큼 많은 걸 가져오진 못합니다. 가져오려면 그에 맞는 코딩을 짜야할 것 같습니다. url이 확실하면 이미지랑 텍스트는 간단하고 확실하게 확보되는 것 같습니다. 나름 쓸모는 있네요 ㅎㅎ

     

    스크래핑을 할 때는 반드시 로봇 배제 표준인 robots.txt를 준수해야 하며, 법적인 문제가 발생하지 않도록 주의하시기 바랍니다.

     

    댓글

    Designed by JB FACTORY

    ....