Biblebot Scraper
μ±μλ΄ μ€ν¬λμ΄νΌλ νκ΅μ±μλνκ΅μ μ°κ΄λ μ 보λ₯Ό μμ§ν μ μλ νμ΄μ¬ ν¨ν€μ§μ λλ€.
μ΄ ν¨ν€μ§λ₯Ό λ°νμΌλ‘, μ±μλ΄ λͺ¨λ°μΌ μ ν리μΌμ΄μ (Android)μ΄ νκ΅μ±μλνκ΅νμλ€μκ² 2018λ λΆν° μ€μλΉμ€ λκ³ μμ΅λλ€.
μ΄ ν¨ν€μ§λ λ€μ― κ°μ§ μΉμ¬μ΄νΈμ λν μ€ν¬λμ΄νΌλ₯Ό μ 곡ν©λλ€.
- νκ΅μ±μλνκ΅ μΈνΈλΌλ· μ€ν¬λμ΄νΌ
- νκ΅μ±μλνκ΅ LMS μ€ν¬λμ΄νΌ
- νκ΅μ±μλνκ΅ ννμ΄μ§ μ€ν¬λμ΄νΌ
- OKPOS λ§μΌλ¦¬μ§ μμ€ν μ€ν¬λμ΄νΌ
- νκ΅μ±μλνκ΅ λμκ΄ μ€ν¬λμ΄νΌ
Installation
$ pip install 'biblebot[http]'
Requirements
-
beautifulsoup4
: htmlκ³Ό xml μμ λ°μ΄ν°λ₯Ό μΆμΆνκΈ° μν΄ μ¬μ©ν©λλ€. -
aiohttp
: HTTP μμ²μ μν΄ μ¬μ©ν©λλ€. (OPTIONAL)
HTTP μμ²μ μν΄ HTTP μμ² ν¨ν€μ§κ° νμν©λλ€. aiohttp
λλ requests
ν¨ν€μ§κ° μ‘΄μ¬ν κ²½μ° μλμΌλ‘ μΈμνμ¬ μ¬μ©ν©λλ€.
κ·Έ μΈμ HTTP μμ² ν¨ν€μ§λ₯Ό μ΄μ©νκ³ μΆλ€λ©΄ BaseRequest
μΆμν΄λμ€λ₯Ό μμλ°μ ꡬνν λ€, HTTPClient.set
μ μ΄μ©νμ¬ λ±λ‘ν΄ μ¬μ©ν μ μμ΅λλ€.
π Documentation
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"
]
]
}
λ λ§μ κΈ°λ₯μ μ¬κΈ°μ νμΈνμΈμ.