Scraper for KBU students


License
MIT
Install
pip install biblebot==1.1.5

Documentation

Biblebot Scraper

Python Code style: black

μ„±μ„œλ΄‡ μŠ€ν¬λž˜μ΄νΌλŠ” ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅μ™€ μ—°κ΄€λœ 정보λ₯Ό μˆ˜μ§‘ν•  수 μžˆλŠ” 파이썬 νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€.

이 νŒ¨ν‚€μ§€λ₯Ό λ°”νƒ•μœΌλ‘œ, μ„±μ„œλ΄‡ λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Android)이 ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ν•™μƒλ“€μ—κ²Œ 2018λ…„λΆ€ν„° μ‹€μ„œλΉ„μŠ€ 되고 μžˆμŠ΅λ‹ˆλ‹€.

이 νŒ¨ν‚€μ§€λŠ” λ‹€μ„― 가지 μ›Ήμ‚¬μ΄νŠΈμ— λŒ€ν•œ 슀크래이퍼λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

  1. ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ μΈνŠΈλΌλ„· 슀크래이퍼
  2. ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ LMS 슀크래이퍼
  3. ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ ν™ˆνŽ˜μ΄μ§€ 슀크래이퍼
  4. OKPOS λ§ˆμΌλ¦¬μ§€ μ‹œμŠ€ν…œ 슀크래이퍼
  5. ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ λ„μ„œκ΄€ 슀크래이퍼

Installation

$ pip install 'biblebot[http]'

Requirements

  • beautifulsoup4: htmlκ³Ό xml μ—μ„œ 데이터λ₯Ό μΆ”μΆœν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • aiohttp: HTTP μš”μ²­μ„ μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. (OPTIONAL)

HTTP μš”μ²­μ„ μœ„ν•΄ HTTP μš”μ²­ νŒ¨ν‚€μ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€. aiohttp λ˜λŠ” requests νŒ¨ν‚€μ§€κ°€ μ‘΄μž¬ν•  경우 μžλ™μœΌλ‘œ μΈμ‹ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

κ·Έ μ™Έμ˜ HTTP μš”μ²­ νŒ¨ν‚€μ§€λ₯Ό μ΄μš©ν•˜κ³  μ‹Άλ‹€λ©΄ BaseRequest μΆ”μƒν΄λž˜μŠ€λ₯Ό 상속받아 κ΅¬ν˜„ν•œ λ’€, HTTPClient.set을 μ΄μš©ν•˜μ—¬ 등둝해 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“’ Documentation

APIs document

Get started

곡지사항 κ°€μ Έμ˜€κΈ°

import asyncio
from pprint import pprint

from biblebot import KbuAPI


async def main():
    resp = await KbuAPI.MainNotice.fetch(page=2)  # 곡지사항 2νŽ˜μ΄μ§€
    result = KbuAPI.MainNotice.parse(resp)
    pprint(result.data)

asyncio.run(main())

Output:

{
    "notice": [
        {
            "seq": "3742",
            "title": "[λŒ€ν•™μ› μž…μ‹œ] 2020학년도 ν›„κΈ° ν•œκ΅­μ„±μ„œλŒ€ν•™κ΅ λŒ€ν•™μ› μ‹ μž…μƒ λͺ¨μ§‘",
            "author": "μž₯성희",
            "date": "2020-07-31",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46649?p=2"
        },
        {
            "seq": "3741",
            "title": "[κΈ°μ΄ˆκ΅μœ‘μ›] 2020-2ν•™κΈ° μˆ˜κ°•μ‹ μ²­ κΈ°μ΄ˆκ΅μœ‘μ›, μ˜μ–΄κ΅μœ‘μ„Όν„° 곡지사항 μ•ˆλ‚΄",
            "author": "κΉ€λ‹€μœ—",
            "date": "2020-07-30",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46645?p=2"
        },
        {
            "seq": "3740",
            "title": "[학적] 2020-2ν•™κΈ° 적용 μœ΅ν•©λͺ¨λ“ˆ κ΅μœ‘κ³Όμ • 승인자 λ°œν‘œ",
            "author": "김희",
            "date": "2020-07-30",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46644?p=2"
        },
        {
            "seq": "3739",
            "title": "[학적] 2020-2ν•™κΈ° 적용 뢀전곡 승인자 λ°œν‘œ",
            "author": "김희",
            "date": "2020-07-30",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46643?p=2"
        },
        {
            "seq": "3738",
            "title": "[학적] 2020-2ν•™κΈ° 적용 λ³΅μˆ˜μ „κ³΅ 승인자 λ°œν‘œ",
            "author": "김희",
            "date": "2020-07-30",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46641?p=2"
        },
        {
            "seq": "3737",
            "title": "[학적] 2020-2ν•™κΈ° 적용 μ „κ³Ό 승인자 λ°œν‘œ",
            "author": "김희",
            "date": "2020-07-30",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46640?p=2"
        },
        {
            "seq": "3736",
            "title": "[μˆ˜μ—…] 2020-2ν•™κΈ° κ°œμ„€κ°•μ’Œ 및 μ‹œκ°„ν‘œ λ°œν‘œ μ•ˆλ‚΄",
            "author": "μœ λ‹€μš΄",
            "date": "2020-07-28",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46633?p=2"
        },
        {
            "seq": "3735",
            "title": "[μƒν™œκ΄€] 2020-2ν•™κΈ° μƒν™œκ΄€ μž…μ£Ό μ‹ μ²­ 곡고",
            "author": "쑰철남",
            "date": "2020-07-28",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46631?p=2"
        },
        {
            "seq": "3734",
            "title": "[학적] 2019학년도 ν›„κΈ° ν•™μœ„μˆ˜μ—¬μž λ°œν‘œ",
            "author": "김희",
            "date": "2020-07-24",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46617?p=2"
        },
        {
            "seq": "3733",
            "title": "[학점ꡐλ₯˜] 2020-2ν•™κΈ° μ„œμšΈμ—¬μžλŒ€ν•™κ΅ 학점ꡐλ₯˜ μ‹ μ²­ μ•ˆλ‚΄",
            "author": "μœ λ‹€μš΄",
            "date": "2020-07-24",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46616?p=2"
        },
        {
            "seq": "3732",
            "title": "[κ·œμ •] 20-7μ›” κ·œμ • κ°œμ • 곡고",
            "author": "윀경민",
            "date": "2020-07-23",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46615?p=2"
        },
        {
            "seq": "3731",
            "title": "[μˆ˜μ—…] 2020-ν•˜κ³„κ³„μ ˆν•™κΈ° 성적 확인 및 μ΄μ˜μ‹ μ²­ μ•ˆλ‚΄",
            "author": "μœ λ‹€μš΄",
            "date": "2020-07-23",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46614?p=2"
        },
        {
            "seq": "3730",
            "title": "[λŒ€ν•™μΈμ‚¬] 2020λ…„ μž₯μ• λŒ€ν•™μƒ κ΅μœ‘λ³΅μ§€μ§€μ› μ‹€νƒœν‰κ°€ μœ„μ›νšŒ 및 보직변경에 λ”°λ₯Έ μœ„μ›νšŒ μž„λͺ…",
            "author": "κΉ€ν˜„λ™",
            "date": "2020-07-23",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46612?p=2"
        },
        {
            "seq": "3729",
            "title": "[μˆ˜μ—…] 2020-2ν•™κΈ° μˆ˜κ°•μ‹ μ²­ μ•ˆλ‚΄ (μˆ˜μ • 7/24)",
            "author": "μœ λ‹€μš΄",
            "date": "2020-07-17",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46603?p=2"
        },
        {
            "seq": "3728",
            "title": "[μ±„μš©] μ»΄ν“¨ν„°μ†Œν”„νŠΈμ›¨μ–΄ν•™κ³Ό μ‹€μŠ΅μ‘°κ΅ μ±„μš© 재곡고(~7/24κΉŒμ§€)",
            "author": "κΉ€λ³‘μˆ˜",
            "date": "2020-07-17",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46601?p=2"
        },
        {
            "seq": "3727",
            "title": "[μ‚°ν•™ν˜‘λ ₯단] 2020년도 ν•™μˆ μ§€μ§€μ›μ‚¬μ—…(μΈλ¬Έμ‚¬νšŒλΆ„μ•Ό) μ‹ κ·œκ³Όμ œ 곡λͺ¨",
            "author": "윀경민",
            "date": "2020-07-16",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46599?p=2"
        },
        {
            "seq": "3726",
            "title": "(μ½”λ‘œλ‚˜) λŒ€ν•™μƒ λŒ€λ©΄λͺ¨μž„ 및 ν™œλ™ λ“± 자제 ν˜‘μ‘° μš”μ²­(κ΅μœ‘λΆ€ 곡문)",
            "author": "κΉ€λ³‘μˆ˜",
            "date": "2020-07-14",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46598?p=2"
        },
        {
            "seq": "3725",
            "title": "일립관 μŠΉκ°•κΈ°(7μΈ΅) μš΄ν–‰ 쀑지 μ•ˆλ‚΄",
            "author": "이은광",
            "date": "2020-07-14",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46597?p=2"
        },
        {
            "seq": "3724",
            "title": "[μ±„μš©] μ»΄ν“¨ν„°μ†Œν”„νŠΈμ›¨μ–΄ν•™κ³Ό μ‹€μŠ΅μ‘°κ΅ μ±„μš© 곡고(~7/16κΉŒμ§€)",
            "author": "κΉ€λ³‘μˆ˜",
            "date": "2020-07-09",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46593?p=2"
        },
        {
            "seq": "3723",
            "title": "[μˆ˜μ—…] 2020-1ν•™κΈ° 성적 μ΄μ˜μ‹ μ²­ μ•ˆλ‚΄",
            "author": "μœ λ‹€μš΄",
            "date": "2020-07-09",
            "url": "https://www.bible.ac.kr/ko/life/notice/view/46591?p=2"
        }
    ]
}

μˆ˜κ°•ν•˜λŠ” κ°•μ˜ 정보 κ°€μ Έμ˜€κΈ°

import asyncio
from pprint import pprint

from biblebot import IntranetAPI


async def main():
    account = ("본인 아이디", "본인 νŒ¨μŠ€μ›Œλ“œ")

    # Login
    resp = await IntranetAPI.Login.fetch(*account)
    result = IntranetAPI.Login.parse(resp)
    cookie = result.data["cookies"]

    # Get course information
    resp = await IntranetAPI.Course.fetch(cookies=cookie, semester="20201")
    result = IntranetAPI.Course.parse(resp)
    pprint(result.data)
    
asyncio.run(main())

Output:

{
    "head": [
        "κ°•μ’Œμ½”λ“œ",
        "κ°•μ’Œλͺ…",
        "μ΄μˆ˜κ΅¬λΆ„",
        "학점",
        "ꡐ수λͺ…",
        "κ°•μ˜μ‹œκ°„",
        "선택",
        "λΉ„κ³ "
    ],
    "body": [
        [
            "GE264-A",
            "κ²½κ±΄ν›ˆλ ¨",
            "κΈ°μ΄ˆκ³΅ν†΅ν•„μˆ˜",
            "0",
            "μœ μ •μ„ ",
            "(수)12:00~12:30",
            "",
            "NO"
        ],
        [
            "GE495-N",
            "μ „λ„ν›ˆλ ¨β…¦",
            "κΈ°μ΄ˆκ³΅ν†΅ν•„μˆ˜",
            "0",
            "μ΅œμ˜νƒœ",
            "(수)13:30~15:20",
            "",
            "NO"
        ],
        [
            "GE748-A",
            "μ—‘μ…€μŠ€ν”„λ ˆλ“œμ‹œνŠΈ",
            "ꡐ양선택",
            "1",
            "ν•œμ§„ν˜Έ",
            "(μ›”)14:55~16:10",
            "",
            "NO"
        ],
        [
            "IC122-A",
            "κ³ κΈ‰μ†Œν”„νŠΈμ›¨μ–΄ν”„λ‘œμ νŠΈ",
            "전곡선택",
            "3",
            "정해덕",
            "(ν™”)14:55~16:10(λͺ©)14:55~16:10",
            "",
            "NO"
        ],
        [
            "IC134-D",
            "λ―Έλž˜μ„€κ³„μƒλ‹΄β…¦",
            "μ „κ³΅ν•„μˆ˜",
            "0",
            "정해덕",
            "(수)15:30~16:20",
            "",
            "NO"
        ],
        [
            "IC140-A",
            "λΉ…λ°μ΄ν„°κΈ°μˆ ",
            "전곡선택",
            "3",
            "μ–‘ν˜œκ²½",
            "(μ›”)13:30~14:45(λͺ©)13:30~14:45",
            "",
            "NO"
        ],
        [
            "IC143-A",
            "쒅합섀계I",
            "μ „κ³΅ν•„μˆ˜",
            "3",
            "정해덕",
            "(ν™”)16:20~17:35(λͺ©)16:20~17:35",
            "",
            "NO"
        ],
        [
            "IC161-A",
            "μ°½μ˜μ ν†΅ν•©μ„€κ³„",
            "전곡선택",
            "3",
            "ν˜„μš°μ„",
            "(μ›”)16:20~17:35(ν™”)13:30~14:45",
            "",
            "NO"
        ]
    ]
}

더 λ§Žμ€ κΈ°λŠ₯은 μ—¬κΈ°μ„œ ν™•μΈν•˜μ„Έμš”.