Aplikasi search engine yang dibuat dengan menggunakan crawler, document ranking, dan page ranking
- Database komponennya ada yg disesuaikan
- Berfokus kepada pencarian paragraph dan tags
- 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