반응형
0. 들어가기
-. 게시판 기능이 대강 구현됐으니, 잠시 숨 돌릴겸 dart에 게시되는 전자공시를 가져오는 페이지를 만들어보겟다.
-. python 모듈 중 rss feed를 가져오는 feedparser를 사용해본다.
1. 코드
-. pypi에서 feedparser 설치한다.
pip install feedparser
-. 예제를 따라 간단하게 작성한다. url은 현대모비스를 사용했다. 오늘이 일요일이라 최근 공시는 뜨는게 없다. (일 단위로 뜸)
import feedparser
url = ["http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00164788"]
def RSScrawler(url):
d = feedparser.parse(url)
print(type(d))
print(d)
if __name__ == "__main__":
RSScrawler(url[0])
-. 이런식으로 json 파일이 출력됨.
-. 내용물을 살짝 정리하면 아래와 같다.
-. 출력을 조금 깔끔하게 정리
import feedparser
url = ["http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00164788"]
def RSScrawler(url):
d = feedparser.parse(url)
for each in d['entries']:
subject = each['title']
link = each['link']
pubdate = each['published']
company = each['author']
print("회사명: ", company, "공시날짜: ", pubdate)
print("공시제목: ", subject)
print("공시링크: ", link)
print("-------------")
if __name__ == "__main__":
RSScrawler(url[0])
-. 출력물
2. DB에 저장
-. DB에는 회사명/제목/링크/게시날짜 정도를 저장할 예정이다.
-. 앞 포스팅과 동일하게 DB 모델설정 및 반영
class FeedRepository(db.Model):
__tablename__ = "DARTFEED_TB"
id = db.Column(db.Integer, primary_key=True)
company = db.Column(db.String(200), nullable=False)
title = db.Column(db.String(200), nullable=False)
link = db.Column(db.String(200), nullable=False)
feedDate = db.Column(db.DateTime(), nullable=False)
-. DB 생성확인
-. DB에 반영하기 위한 코드 작성. 중복은 걸러내고.
def RSScrawler(url):
#기존 list 확인
existList = FeedRepository.query.with_entities(FeedRepository.feedNo).all()
_existList = [each[0] for each in existList]
for _url in url:
d = feedparser.parse(_url)
for each in d['entries']:
subject = each['title']
link = each['link']
pubdate = parse(each['published'])
company = each['author']
rcpNo = int(link.split("=")[1])
if rcpNo not in _existList:
print("회사명: ", company, "공시날짜: ", pubdate)
print("공시제목: ", subject)
print("공시링크: ", link)
print("-------------")
feed = FeedRepository(company=company, title=subject, link=link, feedDate=pubdate, feedNo=rcpNo)
db.session.add(feed)
db.session.commit()
if __name__ == "__main__":
RSScrawler(url)
3. 공시 게시판 생성 및 출력
-. 이전 포스팅과 동일한 구조로 만듬. 하는김에 회사 별 서치 추가 목적으로 회사 몇개 더 받아둠.
-. 다음 포스팅에선 회사별 검색 기능을 추가해야겠다.
728x90
반응형
'python' 카테고리의 다른 글
[tensorflow] keras (생활코딩) - tensorflow 1.x / 2.x 차이 (0) | 2021.03.31 |
---|---|
[python] 한경 컨센서스 크롤링 (1) | 2021.03.18 |
[Python] 신용카드 혜택 모으기 - 네이버 신용카드 정보 크롤링 (2) (0) | 2021.02.16 |
[Python] Jinja(神社) 진자? 신사? - 파이썬은 날먹 (0) | 2021.02.14 |
[Python] Pandas Dataframe- 정렬 및 인덱스 재설정 (0) | 2020.11.25 |
최근댓글