Aplikasi search engine yang dibuat dengan menggunakan crawler, document ranking, dan page ranking
- Pastikan komputer/server sudah terinstall Python 3.6+ dan MySQL
- Buka file
.env
dan ubah konfigurasinya dengan benar (akses database, konfigurasi crawler, dll) - Install library python yang diperlukan dengan menjalankan
pip install -r requirements.txt
- Jalankan program sesuai dengan perintah di bawah
General
Python run_crawl.py
untuk menjalankan crawlerPython run_page_rank.py
untuk menjalankan page rankPython run_tf_idf.py
untuk menjalankan tf idfPython run_api.py
untuk menjalankan REST APIPython run_search_engine_console.py
untuk menjalankan search engine berbasis console
Background Services
- Gunakan
crawl.service
di folder services untuk menjalankan crawler, page rank, dan tf idf di background menggunakan systemd pada server
[GET] Get Similarity Overall Ranking
-
URL:
/api/v1.0/overall_ranking/similarity?keyword=barcelona&sort=similarity&start=0&length=10
-
Params Detail: sort options:
similarity
,tfidf
, orpagerank
. start and length are optional. -
Method:
GET
-
Response:
{
"data": [
{
"id_page": 5,
"pagerank_score": 0.05263157894736842,
"similarity_score": 0.49220540497550275,
"tfidf_total": 0.06595637671355718,
"url": "https://20.detik.com/live"
},
{
"id_page": 1,
"pagerank_score": 0.05263157894736842,
"similarity_score": 0.45263157894736844,
"tfidf_total": 0.0,
"url": "https://detik.com"
}
],
"message": "Sukses",
"ok": true
}
[GET] Get TF-IDF Document Ranking
-
URL:
/api/v1.0/document_ranking/tf_idf?keyword=barcelona&start=0&length=10
-
Params Detail: start and length are optional.
-
Method:
GET
-
Response:
{
"data": [
{
"id_tfidf": 18,
"keyword": "klub barcelona",
"tfidf_total": 0.9,
"url": "https://detik.com/barcelona"
},
{
"id_tfidf": 19,
"keyword": "klub barcelona",
"tfidf_total": 0.8,
"url": "https://www.detik.com/?tagfrom=klub"
}
],
"message": "Sukses",
"ok": true
}
[GET] Get Page-Rank Page Ranking
-
URL:
/api/v1.0/page_ranking/page_rank?start=0&length=10
-
Params Detail: start and length are optional.
-
Method:
GET
-
Response:
{
"data": [
{
"id_pagerank": 7,
"pagerank_score": 0.006093279237620995,
"url": "https://news.detik.com"
},
{
"id_pagerank": 15,
"pagerank_score": 0.005689670500678926,
"url": "https://news.detik.com/x"
}
],
"message": "Sukses",
"ok": true
}
[GET] Run Crawling
-
URL:
/api/v1.0/crawling/crawl?duration=10
-
Method:
GET
-
Response:
{
"message": "Sukses",
"ok": true
}
[GET] Get Crawled Pages
-
URL:
/api/v1.0/crawling/pages?start=0&length=10
-
Params Detail: start and length are optional.
-
Method:
GET
-
Response:
{
"data": [
{
"content_text": "",
"crawl_id": 1,
"created_at": "2022-09-29 19:39:13",
"description": "Indeks berita terkini dan terbaru hari ini dari peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, dan liputan khusus di Indonesia dan Internasional",
"duration_crawl": "0:00:03",
"hot_url": 0,
"html5": 1,
"id_information": 1,
"keywords": "berita hari ini, berita terkini, berita terbaru, info berita, peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, liputan khusus, Indonesia, Internasional",
"model_crawl": "BFS crawling",
"size_bytes": 252595,
"title": "detikcom - Informasi Berita Terkini dan Terbaru Hari Ini",
"url": "https://detik.com"
},
{
"content_text": "",
"crawl_id": 1,
"created_at": "2022-09-29 19:39:16",
"description": "Indeks berita terkini dan terbaru hari ini dari peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, dan liputan khusus di Indonesia dan Internasional",
"duration_crawl": "0:00:02",
"hot_url": 0,
"html5": 1,
"id_information": 2,
"keywords": "berita hari ini, berita terkini, berita terbaru, info berita, peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, liputan khusus, Indonesia, Internasional",
"model_crawl": "BFS crawling",
"size_bytes": 252607,
"title": "detikcom - Informasi Berita Terkini dan Terbaru Hari Ini",
"url": "https://www.detik.com/?tagfrom=framebar"
}
],
"message": "Sukses",
"ok": true
}
[POST] Get Page Information
-
URL:
/api/v1.0/crawling/page_information
-
Method:
POST
-
Request Payload:
{
"id_pages": [1]
}
- Response:
{
"data": [
{
"content_text": "",
"crawl_id": 2,
"created_at": "2022-10-06 06:47:17",
"description": "Indeks berita terkini dan terbaru hari ini dari peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, dan liputan khusus di Indonesia dan Internasional",
"duration_crawl": "0:00:00",
"hot_url": 0,
"html5": 1,
"id_page": 1,
"keywords": "berita hari ini, berita terkini, berita terbaru, info berita, peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, liputan khusus, Indonesia, Internasional",
"model_crawl": "BFS crawling",
"size_bytes": 244796,
"title": "detikcom - Informasi Berita Terkini dan Terbaru Hari Ini",
"url": "https://detik.com"
}
],
"message": "Sukses",
"ok": true
}
[POST] Start Insert Crawled Pages
-
URL:
/api/v1.0/crawling/start_insert
-
Method:
POST
-
Request Payload:
{
"start_urls": "https://www.indosport.com https://detik.com https://www.curiouscuisiniere.com",
"keyword": "",
"duration_crawl": 28800
}
- Response:
{
"data": {
"id_crawling": 6
},
"message": "Sukses",
"ok": true
}
[POST] Insert Crawled Page
-
URL:
/api/v1.0/crawling/insert_page
-
Method:
POST
-
Request Payload:
{
"page_information": {
"crawl_id": 3,
"url": "https://www.indosport.com",
"html5": 0,
"title": "INDOSPORT - Berita Olahraga Terkini dan Sepak Bola Indonesia",
"description": "INDOSPORT.com โ Portal Berita Olahraga dan Sepakbola. Menyajikan berita bola terkini, hasil pertandingan, prediksi dan jadwal pertandingan, Liga 1, Liga Inggris, Liga Spanyol, Liga Italia, Liga Champions.",
"keywords": "Jadwal Pertandingan, Hasil Pertandingan, Klasemen, Prediksi Pertandingan, Liga 1, Liga Inggris, Sepakbola, Liga Champions, Liga Spanyol, Liga Italia, Badminton, Bulutangkis, Link Live Streaming, MotoGP, Berita Sepakbola, Piala Dunia, Tempat Olahraga, Olahraga, Berita Bola, Esport, Basketball.",
"content_text": "Jumat,19 Agustus 2022 21:05 WIB 3 Bintang Murah dengan Statistik Lebih Mentereng dari Casemiro yang Bisa Dilirik Man United Jumat,19 Agustus 2022 19:32 WIB 4 Kali Dipecat Termasuk saat Latih Timnas Indonesia,Mampukah Luis Milla Bawa Persib Berprestasi? Jumat,19 Agustus 2022 18:42 WIB Resmi Latih Persib,Ini 3 Prestasi Mentereng Luis 13:45 WIB Potret Kemenangan Dramatis PSM Makassar Atas RANS Nusantara di Liga 1 Liga Indonesia | Minggu,24 Juli 2022 21:13 WIB Kemegahan dan Fasilitas Mewah Stadion JIS di Hari Launching Tentang Indosport Redaksi Karir Pedoman Media Siber SOP Perlindungan Wartawan Iklan & Kerjasama RSS Copyright ยฉ 2012 - 2022 INDOSPORT. All rights reserved",
"hot_url": 0,
"size_bytes": 121345,
"model_crawl": "BFS Crawling",
"duration_crawl": 28800
},
"page_forms": [
{
"url": "https://www.indosport.com",
"form": "<form action='https://www.indosport.com/search' method='get'></form>"
},
{
"url": "https://www.indosport.com",
"form": "<form action='https://www.indosport.com/searchv2' method='post'></form>"
}
],
"page_images": [
{
"url": "https://www.indosport.com",
"image": "<img alt='' height='1' src='https://certify.alexametrics.com/atrk.gif?account=/HVtm1akKd607i' style='display:none' width='1'/>"
},
{
"url": "https://www.indosport.com",
"image": "<img alt='' height='1' src='https://sb.scorecardresearch.com/blabla.jpeg' style='display:none' width='1'/>"
}
],
"page_linking": [
{
"crawl_id": 3,
"url": "https://www.indosport.com",
"outgoing_link": "https://www.indosport.com/sepakbola"
},
{
"crawl_id": 1,
"url": "https://www.indosport.com",
"outgoing_link": "https://www.indosport.com/liga-spanyol"
}
],
"page_list": [
{
"url": "https://www.indosport.com",
"list": "<li class='bc_home'><a href='https://www.indosport.com'><i class='sprite sprite-mobile sprite-icon_home icon-sidebar'></i></li>"
},
{
"url": "https://www.indosport.com",
"list": "<li class='bc_home'><a href='https://www.indosport.com'><i class='sprite sprite-mobile sprite-icon_home icon-sidebar'></i></li>"
}
],
"page_scripts": [
{
"url": "https://www.indosport.com",
"script": "<script type='text/javascript'>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;</script>"
},
{
"url": "https://www.indosport.com",
"script": "<script type='text/javascript'>window.ga=window.bc||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;</script>"
}
],
"page_styles": [
{
"url": "https://www.indosport.com",
"style": "<style>.bn_skin{z-index: 2 !important;}</style>"
},
{
"url": "https://www.indosport.com",
"style": "<style>.bn_skin{z-index: 115 !important;}</style>"
}
],
"page_tables": [
{
"url": "https://www.indosport.com",
"table_str": "<table class='table'><thead><tr><th class='waktu'>Waktu</th><th class='pertandingan'>Pertandingan</th><th class='tv'>Live TV</th></tr></thead><tbody></tr></tbody></table>"
},
{
"url": "https://www.indosport.com",
"table_str": "<table class='table'><thead><tr><th class='waktu'>Waktu</th><th class='pertandingan'>Pertandingan</th><th class='tv'>Live TV</th></tr></thead><tbody></tr></tbody></table>"
}
]
}
- Response:
{
"message": "Sukses",
"ok": true
}
.
โโโ docs # Sebagai tempat dokumentasi file seperti diagram, product backlog, dll
โโโ html # Berisi dokumentasi class dan fungsi yang di-generate dari library pdoc3
โโโ services # Kumpulan konfigurasi background service yang dipakai di systemd/systemctl
โโโ src # Source code search engine
โ โโโ api # Folder untuk kodingan REST API
โ | โโโ app.py # Untuk run Flask dan menggabungkan routes
โ | โโโ crawling.py # Routes dan fungsi API untuk crawling
โ | โโโ document_ranking.py # Routes dan fungsi API untuk document ranking
โ | โโโ overall_ranking.py # Routes dan fungsi API untuk overall ranking
โ | โโโ page_ranking.py # Routes dan fungsi API untuk page ranking
| |
โ โโโ crawling # Folder untuk kodingan crawling
โ | โโโ methods # Folder untuk berbagai metode crawling
โ | | โโโ breadth_first_search.py # Fungsi-fungsi crawling metode BFS
| | | โโโ modified_similarity_based.py # Fungsi-fungsi crawling metode MSB
โ | โโโ crawl.py # Untuk run crawling dengan menggabungkan metode yang ada
โ | โโโ page_content.py # Fungsi-fungsi yang menghubungkan ke database dan halaman html
โ | โโโ util.py # Fungsi-fungsi pendukung crawling
| |
โ โโโ database # Folder untuk kodingan database
โ | โโโ database.py # Berisi kode untuk pengoperasian database seperti koneksi, query, dll
| |
โ โโโ document_ranking # Folder untuk kodingan document ranking
โ | โโโ tf_idf.py # Implementasi dari TF-IDF
| |
โ โโโ overall_ranking # Folder untuk kodingan overall ranking
โ | โโโ similarity.py # Implementasi dari similarity score
| |
โ โโโ page_ranking # Folder untuk kodingan page ranking
โ | โโโ page_rank.py # Implementasi dari Google PageRank
|
โโโ .env # Konfigurasi credentials database dan crawler
โโโ run_api.py # Script utama untuk run REST API
โโโ run_crawl.py # Script utama untuk run crawling
โโโ run_page_rank.py # Script utama untuk run page rank
โโโ run_search_engine_console.py # Script utama untuk run search engine console
โโโ run_tf_idf.py # Script utama untuk run TF IDF
โโโ requirements.txt # Berisi list library yang diperlukan