http://newspaper.readthedocs.io/en/latest/


각 언론사의 url을 GET하여 부동산뉴스를 보아보고 있습니다.

url만 바꿔서 아주 간단하게 뉴스기사를 가져오고

>>> from newspaper import Article >>> url = 'http://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/' >>> article = Article(url)
>>> article.download()
>>> article.parse()

 자연어 처리 실행시키고

>>> article.nlp()

키워드를 뽑아주고 요약도 해줍니다.

>>> article.keywords
['New Years', 'resolution', ...]

>>> article.summary
'The study shows that 93% of people ...'

한글도 그럭저럭 해줍니다. (네이버 뉴스 요약해주는 서비스랑 비슷하거나 조금 떨어지는 수준)


12개 정도의 언론사의 오피니언, 부동산을
오늘의 주요 키워드 뽑아서 보는데 일부 키워드 예외처리만 하면 볼만합니다.






url 정보를 세팅하고 이에 대해서 request 요청하면 응답 정보를 주는데

http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?LAWD_CD=11440&DEAL_YMD=201801&serviceKey=###SERVICE_KEY###



얼마전에 수정이 있었는지
응답되는 정보가 변경되었습니다.

    req = urllib.request.Request(request_url)
    try:
        res = urllib.request.urlopen(req)
    except UnicodeEncodeError:
        print('[OpenAPI] UnicodeEncodeError')
        return


    data = res.read().decode('utf-8')
    soup = BeautifulSoup(data, 'html.parser')
    if (soup.resultcode.string != '00'):
        print('[OpenAPI] ',  soup.resultmsg.string)
        return

    items = soup.findAll('item')
    print(items)


가져온 정보를 보니 주석과 <, > 정보들이 섞여 있었습니다.

<item>&lt;거래금액&gt;    83,000<!--거래금액-->&lt;
건축년도&gt;2005<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;
법정동&gt; 상암동<!--법정동-->&lt;아파트&gt;상암월드컵파크6단지<!--아파트-->&lt;
월&gt;1<!--월-->&lt;일&gt;11~20<!--일-->&lt;전용면적&gt;104.32<!--전용면적-->&lt;
지번&gt;1689<!--지번-->&lt;지역코드&gt;11440<!--지역코드-->&lt;층&gt;6<!--층--></item>


기존 코드를 수정해서 text 정보만 가져왔습니다.

item = item.text

HTML 태그들이 없어졌습니다.

<거래금액>    83,000<건축년도>2005<년>2018<법정동> 상암동<아파트>상암월드컵파크6단지<월>1<일>11~20<전용면적>104.32<지번>1689<지역코드>11440<층>6


이걸 다시 파싱하려니 정규표현식을 사용해야 했습니다.
결과만 보면 간단합니다.

split_item = re.split('<.*?>', item)


이렇게 하고나니 List형으로 잘 분리합니다.

['', '    83,000', '2005', '2018', ' 상암동', '상암월드컵파크6단지',
'1', '11~20', '104.32', '1689', '11440', '6']


  1. 이재성 2019.10.14 00:11

    비슷한 문제를 겪고 있는데 몇일째 삽질을해도 방법을 못찾겠어요ㅜ.ㅜ 팁 좀 부탁드립니다.

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd

    url = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?serviceKey=KrKzQ4sxQDVnTpdt3X3p8Hi9nZPr5KnsS%2FkKe%2FxVPYbY7cK6NfPtsvJ3%2FoSiJNlK7u2Q8geu1UmUmQQKmZ9f3w%3D%3D&LAWD_CD=11110&DEAL_YMD=201812"

    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    ItemList = soup.findAll('item')
    print(ItemList)



    결과는
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <response>
    <header>
    <resultcode>
    00
    </resultcode>
    <resultmsg>
    NORMAL SERVICE.
    </resultmsg>
    </header>
    <body>
    <items>
    <item>
    &lt;거래금액&gt; 23,500
    <!--거래금액-->
    &lt;건축년도&gt;2003
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 익선동
    <!--법정동-->
    &lt;아파트&gt;현대뜨레비앙
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;8
    <!--일-->
    &lt;전용면적&gt;36.08
    <!--전용면적-->
    &lt;지번&gt;55
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;7
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 20,000
    <!--거래금액-->
    &lt;건축년도&gt;2014
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 연건동
    <!--법정동-->
    &lt;아파트&gt;이화에수풀
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;18
    <!--일-->
    &lt;전용면적&gt;16.98
    <!--전용면적-->
    &lt;지번&gt;195-10
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;7
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 45,500
    <!--거래금액-->
    &lt;건축년도&gt;2004
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 혜화동
    <!--법정동-->
    &lt;아파트&gt;혜화훼미리
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;3
    <!--일-->
    &lt;전용면적&gt;60.82
    <!--전용면적-->
    &lt;지번&gt;20-12
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;7
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 26,800
    <!--거래금액-->
    &lt;건축년도&gt;2002
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 창신동
    <!--법정동-->
    &lt;아파트&gt;MID그린(4동)
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;20
    <!--일-->
    &lt;전용면적&gt;59.55
    <!--전용면적-->
    &lt;지번&gt;601-5
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;7
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 78,700
    <!--거래금액-->
    &lt;건축년도&gt;2009
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 숭인동
    <!--법정동-->
    &lt;아파트&gt;종로청계힐스테이트
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;21
    <!--일-->
    &lt;전용면적&gt;84.9478
    <!--전용면적-->
    &lt;지번&gt;766
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;9
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 65,000
    <!--거래금액-->
    &lt;건축년도&gt;2009
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 숭인동
    <!--법정동-->
    &lt;아파트&gt;종로청계힐스테이트
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;26
    <!--일-->
    &lt;전용면적&gt;59.9426
    <!--전용면적-->
    &lt;지번&gt;766
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;2
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 24,300
    <!--거래금액-->
    &lt;건축년도&gt;1997
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 숭인동
    <!--법정동-->
    &lt;아파트&gt;도시그린빌라트19
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;29
    <!--일-->
    &lt;전용면적&gt;57.45
    <!--전용면적-->
    &lt;지번&gt;181-121
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;3
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 135,500
    <!--거래금액-->
    &lt;건축년도&gt;2009
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 평창동
    <!--법정동-->
    &lt;아파트&gt;롯데캐슬 로잔
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;15
    <!--일-->
    &lt;전용면적&gt;190.743
    <!--전용면적-->
    &lt;지번&gt;108
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;4
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 90,000
    <!--거래금액-->
    &lt;건축년도&gt;2003
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 평창동
    <!--법정동-->
    &lt;아파트&gt;크래스빌
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;15
    <!--일-->
    &lt;전용면적&gt;187.9
    <!--전용면적-->
    &lt;지번&gt;46-1
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;4
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 41,500
    <!--거래금액-->
    &lt;건축년도&gt;2004
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 평창동
    <!--법정동-->
    &lt;아파트&gt;에지앙빌
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;20
    <!--일-->
    &lt;전용면적&gt;110.61
    <!--전용면적-->
    &lt;지번&gt;179-5
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;2
    <!--층-->
    </item>
    <item>
    &lt;거래금액&gt; 133,000
    <!--거래금액-->
    &lt;건축년도&gt;2009
    <!--건축년도-->
    &lt;년&gt;2018
    <!--년-->
    &lt;법정동&gt; 평창동
    <!--법정동-->
    &lt;아파트&gt;롯데캐슬 로잔
    <!--아파트-->
    &lt;월&gt;12
    <!--월-->
    &lt;일&gt;28
    <!--일-->
    &lt;전용면적&gt;190.743
    <!--전용면적-->
    &lt;지번&gt;108
    <!--지번-->
    &lt;지역코드&gt;11110
    <!--지역코드-->
    &lt;층&gt;1
    <!--층-->
    </item>
    </items>
    <numofrows>
    10
    </numofrows>
    <pageno>
    1
    </pageno>
    <totalcount>
    11
    </totalcount>
    </body>
    </response>
    [<item>&lt;거래금액&gt; 23,500<!--거래금액-->&lt;건축년도&gt;2003<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 익선동<!--법정동-->&lt;아파트&gt;현대뜨레비앙<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;8<!--일-->&lt;전용면적&gt;36.08<!--전용면적-->&lt;지번&gt;55<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;7<!--층--></item>, <item>&lt;거래금액&gt; 20,000<!--거래금액-->&lt;건축년도&gt;2014<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 연건동<!--법정동-->&lt;아파트&gt;이화에수풀<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;18<!--일-->&lt;전용면적&gt;16.98<!--전용면적-->&lt;지번&gt;195-10<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;7<!--층--></item>, <item>&lt;거래금액&gt; 45,500<!--거래금액-->&lt;건축년도&gt;2004<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 혜화동<!--법정동-->&lt;아파트&gt;혜화훼미리<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;3<!--일-->&lt;전용면적&gt;60.82<!--전용면적-->&lt;지번&gt;20-12<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;7<!--층--></item>, <item>&lt;거래금액&gt; 26,800<!--거래금액-->&lt;건축년도&gt;2002<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 창신동<!--법정동-->&lt;아파트&gt;MID그린(4동)<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;20<!--일-->&lt;전용면적&gt;59.55<!--전용면적-->&lt;지번&gt;601-5<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;7<!--층--></item>, <item>&lt;거래금액&gt; 78,700<!--거래금액-->&lt;건축년도&gt;2009<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 숭인동<!--법정동-->&lt;아파트&gt;종로청계힐스테이트<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;21<!--일-->&lt;전용면적&gt;84.9478<!--전용면적-->&lt;지번&gt;766<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;9<!--층--></item>, <item>&lt;거래금액&gt; 65,000<!--거래금액-->&lt;건축년도&gt;2009<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 숭인동<!--법정동-->&lt;아파트&gt;종로청계힐스테이트<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;26<!--일-->&lt;전용면적&gt;59.9426<!--전용면적-->&lt;지번&gt;766<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;2<!--층--></item>, <item>&lt;거래금액&gt; 24,300<!--거래금액-->&lt;건축년도&gt;1997<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 숭인동<!--법정동-->&lt;아파트&gt;도시그린빌라트19<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;29<!--일-->&lt;전용면적&gt;57.45<!--전용면적-->&lt;지번&gt;181-121<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;3<!--층--></item>, <item>&lt;거래금액&gt; 135,500<!--거래금액-->&lt;건축년도&gt;2009<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 평창동<!--법정동-->&lt;아파트&gt;롯데캐슬 로잔<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;15<!--일-->&lt;전용면적&gt;190.743<!--전용면적-->&lt;지번&gt;108<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;4<!--층--></item>, <item>&lt;거래금액&gt; 90,000<!--거래금액-->&lt;건축년도&gt;2003<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 평창동<!--법정동-->&lt;아파트&gt;크래스빌<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;15<!--일-->&lt;전용면적&gt;187.9<!--전용면적-->&lt;지번&gt;46-1<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;4<!--층--></item>, <item>&lt;거래금액&gt; 41,500<!--거래금액-->&lt;건축년도&gt;2004<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 평창동<!--법정동-->&lt;아파트&gt;에지앙빌<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;20<!--일-->&lt;전용면적&gt;110.61<!--전용면적-->&lt;지번&gt;179-5<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;2<!--층--></item>, <item>&lt;거래금액&gt; 133,000<!--거래금액-->&lt;건축년도&gt;2009<!--건축년도-->&lt;년&gt;2018<!--년-->&lt;법정동&gt; 평창동<!--법정동-->&lt;아파트&gt;롯데캐슬 로잔<!--아파트-->&lt;월&gt;12<!--월-->&lt;일&gt;28<!--일-->&lt;전용면적&gt;190.743<!--전용면적-->&lt;지번&gt;108<!--지번-->&lt;지역코드&gt;11110<!--지역코드-->&lt;층&gt;1<!--층--></item>]

    Process finished with exit code 0

그냥 한글을 인코딩해서 gmail 전송하면 한글이 전부 깨져버리는 문제가 발생

구글링해서 찾아보면 python2.x 코드가 있음


그래서 python3.5에서 만들어서 시험한 코드를 이곳에 기록함


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def send_with_gmail(body):
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText

    gmail_user = 'my_id'  # 실제 google 로그인할 때 쓰는 ID
    gmail_pw = 'my_pw'    # 실제 google 로그인할 때 쓰는 Password

    from_addr = 'sender@gmail.com'   # 보내는 사람 주소
    to_addr = 'iam.byungwoo@gmail.com'      # 받는 사람 주소

    msg=MIMEMultipart('alternative')
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = 'Send email with Gmail'     # 제목
    msg.attach(MIMEText(body, 'plain', 'utf-8')) # 내용 인코딩

    ########################
    # https://www.google.com/settings/security/lesssecureapps
    # Make sure less_secure_apps select 'use'
    ########################
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(gmail_user, gmail_pw)
        server.sendmail(from_addr, to_addr, msg.as_string())
        server.quit()
        print('successfully sent the mail')
    except BaseException as e:
        print("failed to send mail", str(e))

if __name__ == '__main__':
    send_msg = '''
    multi
    L
    I
    N
    E
    '''
    send_with_gmail(send_msg)



+ Recent posts