├── README.md ├── scraper.py ├── scraper_Pandas.ipynb └── selector.py /README.md: -------------------------------------------------------------------------------- 1 | # WebscrapingDatabases 2 | a database scraper created with mechanical soup and sqlite 3 |
4 | author: Mariya Sha 5 |
6 | ### Watch on YouTube: 7 | This repository was created to support a YouTube tutorial: 8 |
9 | https://youtu.be/MkGQmZoMuRM 10 |
11 |
12 | 13 | ![Thumbnail_MechanicalSoup](https://user-images.githubusercontent.com/32107652/144741272-1142dffa-7111-4edd-a8f5-3567b364ad1a.png) 14 |
15 | ### File Info: 16 | scraper.py 17 |
18 | is designed to webscrape a table from Wikipedia and store it in an SQlite database. 19 |
20 |
21 | selector.py 22 |
23 | is designed to test wether our database from scraper.py was properly created. 24 |
25 | -------------------------------------------------------------------------------- /scraper.py: -------------------------------------------------------------------------------- 1 | import mechanicalsoup 2 | import pandas as pd 3 | import sqlite3 4 | 5 | # create browser object & open URL 6 | browser = mechanicalsoup.StatefulBrowser() 7 | browser.open("https://en.wikipedia.org/wiki/Comparison_of_Linux_distributions") 8 | 9 | # extract all table headers (entire "Distribution" column) 10 | th = browser.page.find_all("th", attrs={"class": "table-rh"}) 11 | # tidy up and slice off non-table elements 12 | distribution = [value.text.replace("\n", "") for value in th] 13 | distribution = distribution[:95] 14 | 15 | # extract table data (the rest of the table) 16 | td = browser.page.find_all("td") 17 | # tidy up and slice off non-table elements 18 | columns = [value.text.replace("\n", "") for value in td] 19 | columns = columns[6:1051] 20 | 21 | column_names = ["Founder", 22 | "Maintainer", 23 | "Initial_Release_Year", 24 | "Current_Stable_Version", 25 | "Security_Updates", 26 | "Release_Date", 27 | "System_Distribution_Commitment", 28 | "Forked_From", 29 | "Target_Audience", 30 | "Cost", 31 | "Status"] 32 | 33 | dictionary = {"Distribution": distribution} 34 | 35 | # insert column names and their data into a dictionary 36 | for idx, key in enumerate(column_names): 37 | dictionary[key] = columns[idx:][::11] 38 | 39 | # convert dictionary to data frame 40 | df = pd.DataFrame(data = dictionary) 41 | 42 | # create new database and cursor 43 | connection = sqlite3.connect("linux_distro.db") 44 | cursor = connection.cursor() 45 | 46 | # create database table and insert all data frame rows 47 | cursor.execute("create table linux (Distribution, " + ",".join(column_names)+ ")") 48 | for i in range(len(df)): 49 | cursor.execute("insert into linux values (?,?,?,?,?,?,?,?,?,?,?,?)", df.iloc[i]) 50 | 51 | # PERMANENTLY save inserted data in "linux_distro.db" 52 | connection.commit() 53 | 54 | connection.close() 55 | 56 | -------------------------------------------------------------------------------- /scraper_Pandas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 5, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "*********************\n", 13 | "0\n", 14 | " 0 1\n", 15 | "0 NaN This article has multiple issues. Please help ...\n", 16 | "1 NaN This article needs to be updated. The reason g...\n", 17 | "2 NaN This article may require cleanup to meet Wikip...\n", 18 | "*********************\n", 19 | "1\n", 20 | " 0 1\n", 21 | "0 NaN This article needs to be updated. The reason g...\n", 22 | "*********************\n", 23 | "2\n", 24 | " 0 1\n", 25 | "0 NaN This article may require cleanup to meet Wikip...\n", 26 | "*********************\n", 27 | "3\n", 28 | " Distribution Founder Maintainer \\\n", 29 | "0 AlmaLinux AlmaLinux Foundation AlmaLinux Foundation \n", 30 | "1 Alpine Linux Alpine Linux Team Alpine Linux Team \n", 31 | "2 ALT Linux ALT Linux Team ALT Linux Team, ALT Linux LLC \n", 32 | "3 antiX Anticapitalista Anticapitalista \n", 33 | "4 ArchBang Willensky Aristide Stan McLaren \n", 34 | ".. ... ... ... \n", 35 | "92 Xandros Xandros Incorporated Xandros Incorporated \n", 36 | "93 Zentyal eBox Technologies eBox Technologies \n", 37 | "94 Zenwalk Jean-Philippe Guillemin dev team \n", 38 | "95 Zorin OS Zorin Group Zorin Group \n", 39 | "96 Distribution Founder Maintainer \n", 40 | "\n", 41 | " Initial release year Current stable version Security updates (years) \\\n", 42 | "0 2021 8.4 10 years[2] \n", 43 | "1 2006 3.14.1[3] ? \n", 44 | "2 2001 10.0[4] ? \n", 45 | "3 2007 19.4[5] ? \n", 46 | "4 2011 Rolling Rolling \n", 47 | ".. ... ... ... \n", 48 | "92 2001 ? ? \n", 49 | "93 2005 6.2[79] ? \n", 50 | "94 2004 Rolling[80] ? \n", 51 | "95 2009 OS 15.3[81] ? \n", 52 | "96 Initial release year Current stable version Security updates (years) \n", 53 | "\n", 54 | " Release date System distribution commitment \\\n", 55 | "0 2021-05-26 X \n", 56 | "1 2021-08-04 X \n", 57 | "2 2021-12-16 X \n", 58 | "3 2021-05-21 X \n", 59 | "4 ? X \n", 60 | ".. ... ... \n", 61 | "92 2007-07-26 X \n", 62 | "93 2020-06-04 X \n", 63 | "94 2020-12-10 X \n", 64 | "95 2020-10-08 X \n", 65 | "96 Release date System distribution commitment \n", 66 | "\n", 67 | " Forked from Target audience \\\n", 68 | "0 Red Hat Enterprise Linux (RHEL) server, workstation \n", 69 | "1 LEAF Project security, lightweight, general \n", 70 | "2 Mandrake Linux general, school \n", 71 | "3 Debian, MEPIS old computers \n", 72 | "4 Arch Linux (UKM Edition) general \n", 73 | ".. ... ... \n", 74 | "92 Corel Linux ? \n", 75 | "93 Debian, Ubuntu small business server \n", 76 | "94 Slackware general \n", 77 | "95 Ubuntu general, desktop \n", 78 | "96 Forked from Target audience \n", 79 | "\n", 80 | " Cost Status \n", 81 | "0 None Active \n", 82 | "1 None Active \n", 83 | "2 None Active \n", 84 | "3 None Active \n", 85 | "4 None Active \n", 86 | ".. ... ... \n", 87 | "92 Commercial Inactive \n", 88 | "93 Some editions are free of charge ? \n", 89 | "94 None Active \n", 90 | "95 Zorin OS Lite & Core are free, while Business ... Active \n", 91 | "96 Cost Status \n", 92 | "\n", 93 | "[97 rows x 12 columns]\n", 94 | "*********************\n", 95 | "4\n", 96 | " Distribution Default Linux kernel Default file system \\\n", 97 | "0 Alpine Linux Binary blobs ext4 \n", 98 | "1 ALT Linux Binary blobs ext3 \n", 99 | "2 Arch Linux Binary blobs[83] none[84] \n", 100 | "3 BLAG Linux-libre ext3 \n", 101 | "4 Bodhi Linux Binary blobs ext4 \n", 102 | ".. ... ... ... \n", 103 | "65 Webconverger Binary blobs gitfs \n", 104 | "66 XBMC Live Binary blobs ext3 \n", 105 | "67 Zentyal Binary blobs ext4 \n", 106 | "68 Zenwalk Binary blobs ext4 \n", 107 | "69 Distribution Default Linux kernel Default file system \n", 108 | "\n", 109 | " Default init system \\\n", 110 | "0 openrc \n", 111 | "1 systemd \n", 112 | "2 systemd \n", 113 | "3 sysvinit \n", 114 | "4 systemd \n", 115 | ".. ... \n", 116 | "65 sysvinit \n", 117 | "66 systemd \n", 118 | "67 systemd \n", 119 | "68 sysvinit \n", 120 | "69 Default init system \n", 121 | "\n", 122 | " Install-time desktop environment or window manager selection \\\n", 123 | "0 none \n", 124 | "1 KDE Plasma Workspaces, Xfce \n", 125 | "2 Awesome, Budgie, Cinnamon, CuteFish, Deepin, E... \n", 126 | "3 GNOME \n", 127 | "4 Moksha (Enlightenment fork) \n", 128 | ".. ... \n", 129 | "65 dwm enforcing a Browser-only interface \n", 130 | "66 XBMC Media Center \n", 131 | "67 LXDE \n", 132 | "68 Xfce \n", 133 | "69 Install-time desktop environment or window man... \n", 134 | "\n", 135 | " Reproducible builds \n", 136 | "0 In progress[82] \n", 137 | "1 No \n", 138 | "2 In progress[86][87] \n", 139 | "3 No \n", 140 | "4 No \n", 141 | ".. ... \n", 142 | "65 No \n", 143 | "66 No \n", 144 | "67 No \n", 145 | "68 No \n", 146 | "69 Reproducible builds \n", 147 | "\n", 148 | "[70 rows x 6 columns]\n", 149 | "*********************\n", 150 | "5\n", 151 | " Distribution \\\n", 152 | "0 Alpine Linux \n", 153 | "1 Arch Linux \n", 154 | "2 BackTrack \n", 155 | "3 BLAG \n", 156 | "4 Bodhi Linux \n", 157 | "5 BOSS Linux \n", 158 | "6 CentOS \n", 159 | "7 Chakra \n", 160 | "8 Clear Linux OS \n", 161 | "9 CRUX \n", 162 | "10 Debian[132] \n", 163 | "11 Devuan \n", 164 | "12 Dragora GNU/Linux-Libre \n", 165 | "13 dyne:bolic \n", 166 | "14 Fedora[137] \n", 167 | "15 Finnix \n", 168 | "16 Gentoo[143] \n", 169 | "17 gNewSense \n", 170 | "18 Guix System[149] \n", 171 | "19 Hyperbola GNU/Linux-libre \n", 172 | "20 Kali Linux \n", 173 | "21 LibreCMC \n", 174 | "22 Manjaro Linux \n", 175 | "23 MEPIS \n", 176 | "24 Musix GNU+Linux \n", 177 | "25 OpenELEC \n", 178 | "26 openSUSE Leap \n", 179 | "27 openSUSE Tumbleweed \n", 180 | "28 OpenWrt[155] \n", 181 | "29 Oracle Linux[156] \n", 182 | "30 Parabola GNU/Linux-libre \n", 183 | "31 Red Flag Linux \n", 184 | "32 Red Hat Linux[165] \n", 185 | "33 Red Hat Enterprise Linux[167] \n", 186 | "34 Sabayon Linux \n", 187 | "35 Scientific Linux \n", 188 | "36 SHR \n", 189 | "37 Slackware \n", 190 | "38 Solus \n", 191 | "39 Source Mage GNU/Linux \n", 192 | "40 SUSE Linux Enterprise Server[175] \n", 193 | "41 Trisquel GNU/Linux \n", 194 | "42 TurnKey GNU/Linux \n", 195 | "43 Ubuntu/Kubuntu/Xubuntu/Lubuntu \n", 196 | "44 Ututo \n", 197 | "45 Void Linux \n", 198 | "46 XBMCbuntu \n", 199 | "47 Yellow Dog Linux \n", 200 | "48 Distribution \n", 201 | "\n", 202 | " x86 \\\n", 203 | "0 Yes \n", 204 | "1 Unofficial[121]Official discontinued 2017-11-0... \n", 205 | "2 Discontinued from BackTrack 5 and superseded b... \n", 206 | "3 Yes \n", 207 | "4 Yes \n", 208 | "5 Yes \n", 209 | "6 AltArch \n", 210 | "7 No \n", 211 | "8 ? \n", 212 | "9 Yes \n", 213 | "10 Yes \n", 214 | "11 Yes \n", 215 | "12 Yes \n", 216 | "13 Yes \n", 217 | "14 Discontinued from Fedora 30 \n", 218 | "15 Yes \n", 219 | "16 Yes \n", 220 | "17 Yes \n", 221 | "18 Yes \n", 222 | "19 Yes \n", 223 | "20 Yes \n", 224 | "21 No \n", 225 | "22 YesUnofficial[153] \n", 226 | "23 Yes \n", 227 | "24 Yes \n", 228 | "25 Yes \n", 229 | "26 No \n", 230 | "27 Yes \n", 231 | "28 Yes \n", 232 | "29 Yes \n", 233 | "30 Yes \n", 234 | "31 Discontinued8.0[163] \n", 235 | "32 Discontinued9.0 \n", 236 | "33 Discontinued2.1-6[168] \n", 237 | "34 Discontinued \n", 238 | "35 Yes \n", 239 | "36 No \n", 240 | "37 Yes \n", 241 | "38 No \n", 242 | "39 Yes \n", 243 | "40 Yes \n", 244 | "41 Yes \n", 245 | "42 Selected ISOsavailable \n", 246 | "43 Discontinued from Ubuntu 20.04 \n", 247 | "44 Yes \n", 248 | "45 Yes \n", 249 | "46 Yes \n", 250 | "47 No \n", 251 | "48 x86 \n", 252 | "\n", 253 | " x86-64 \\\n", 254 | "0 Yes \n", 255 | "1 Yes \n", 256 | "2 Discontinued from BackTrack 5 and superseded b... \n", 257 | "3 Yes \n", 258 | "4 Yes \n", 259 | "5 Yes \n", 260 | "6 Yes \n", 261 | "7 Yes \n", 262 | "8 Yes \n", 263 | "9 Yes \n", 264 | "10 Yes4.0+ \n", 265 | "11 Yes \n", 266 | "12 Yes \n", 267 | "13 No \n", 268 | "14 Yes \n", 269 | "15 Yes \n", 270 | "16 Yes \n", 271 | "17 Yes \n", 272 | "18 Yes \n", 273 | "19 Yes \n", 274 | "20 Yes \n", 275 | "21 No \n", 276 | "22 Yes \n", 277 | "23 Yes \n", 278 | "24 No \n", 279 | "25 Yes \n", 280 | "26 Yes \n", 281 | "27 Yes \n", 282 | "28 Yes \n", 283 | "29 Yes \n", 284 | "30 Yes \n", 285 | "31 Discontinued8.0[163] \n", 286 | "32 No \n", 287 | "33 Yes3+ \n", 288 | "34 Yes \n", 289 | "35 Yes \n", 290 | "36 No \n", 291 | "37 Yes \n", 292 | "38 Yes \n", 293 | "39 Yes \n", 294 | "40 Yes \n", 295 | "41 Yes \n", 296 | "42 Yes \n", 297 | "43 Yes \n", 298 | "44 Yes \n", 299 | "45 Yes \n", 300 | "46 No \n", 301 | "47 No \n", 302 | "48 x86-64 \n", 303 | "\n", 304 | " arm \\\n", 305 | "0 Yes \n", 306 | "1 Unofficial[123] \n", 307 | "2 Discontinued from BackTrack 5 and superseded b... \n", 308 | "3 No \n", 309 | "4 Discontinued2013-10-23[126] \n", 310 | "5 ? \n", 311 | "6 AltArch \n", 312 | "7 ? \n", 313 | "8 ? \n", 314 | "9 No \n", 315 | "10 Yes2.2+ \n", 316 | "11 Yes \n", 317 | "12 No \n", 318 | "13 No \n", 319 | "14 Yes[138] \n", 320 | "15 No \n", 321 | "16 Yes[144] \n", 322 | "17 No \n", 323 | "18 limited support for armhf 32-bit and aarch64 6... \n", 324 | "19 No \n", 325 | "20 Yes \n", 326 | "21 No \n", 327 | "22 Yes[154] \n", 328 | "23 Yes \n", 329 | "24 No \n", 330 | "25 Yes \n", 331 | "26 v7 64 \n", 332 | "27 v6 v7 64 \n", 333 | "28 Yes \n", 334 | "29 No \n", 335 | "30 Yes, ARMv7[158][159] \n", 336 | "31 No \n", 337 | "32 No \n", 338 | "33 Yes[169] \n", 339 | "34 No \n", 340 | "35 No \n", 341 | "36 Yes \n", 342 | "37 Yes \n", 343 | "38 No \n", 344 | "39 No \n", 345 | "40 AArch64 only[176] \n", 346 | "41 No \n", 347 | "42 No - but under development by community \n", 348 | "43 Yes, including 64-bit ARMv8-A \n", 349 | "44 No \n", 350 | "45 Yes \n", 351 | "46 Yes \n", 352 | "47 No \n", 353 | "48 arm \n", 354 | "\n", 355 | " ia64 ppc[116] \\\n", 356 | "0 No No \n", 357 | "1 No Discontinued unofficial port \n", 358 | "2 No No \n", 359 | "3 No No \n", 360 | "4 No No \n", 361 | "5 No Yes \n", 362 | "6 Discontinued3.5-3.84.1-4.7[127] Beta, Discontinued4.0 \n", 363 | "7 No No \n", 364 | "8 ? No \n", 365 | "9 No No \n", 366 | "10 Discontinued3.0-7.0[133] Discontinued2.2-8 \n", 367 | "11 No No \n", 368 | "12 No No \n", 369 | "13 No No \n", 370 | "14 Discontinued from Fedora 9[139] Discontinued from Fedora 17 \n", 371 | "15 No Yes \n", 372 | "16 Yes Yes \n", 373 | "17 No No \n", 374 | "18 No No \n", 375 | "19 No No \n", 376 | "20 No No \n", 377 | "21 No No \n", 378 | "22 No No \n", 379 | "23 No No \n", 380 | "24 No No \n", 381 | "25 No No \n", 382 | "26 No No \n", 383 | "27 No No \n", 384 | "28 No Yes \n", 385 | "29 Discontinued5[157] No \n", 386 | "30 No No \n", 387 | "31 Discontinued3[164] No \n", 388 | "32 Discontinued7.1-7.2 Test release5.1[166] \n", 389 | "33 Discontinued2.1-5[170] Yes3+ \n", 390 | "34 No No \n", 391 | "35 Discontinued3-4 No \n", 392 | "36 No No \n", 393 | "37 No No \n", 394 | "38 No No \n", 395 | "39 No Yes \n", 396 | "40 Yes Yes \n", 397 | "41 No No \n", 398 | "42 No No \n", 399 | "43 No Yes \n", 400 | "44 No No \n", 401 | "45 No Unofficial[178] \n", 402 | "46 No No \n", 403 | "47 No Yes \n", 404 | "48 ia64 ppc \n", 405 | "\n", 406 | " ppc64 sparc32 \\\n", 407 | "0 Yes No \n", 408 | "1 No No \n", 409 | "2 No No \n", 410 | "3 No No \n", 411 | "4 No No \n", 412 | "5 Yes No \n", 413 | "6 AltArch Beta4.2[127][128] \n", 414 | "7 No No \n", 415 | "8 No No \n", 416 | "9 No No \n", 417 | "10 Yes Discontinued2.1-4.0[134] \n", 418 | "11 No No \n", 419 | "12 No No \n", 420 | "13 No No \n", 421 | "14 Yes No \n", 422 | "15 Yes No \n", 423 | "16 Yes Yes \n", 424 | "17 No No \n", 425 | "18 No No \n", 426 | "19 In progress[151] No \n", 427 | "20 No No \n", 428 | "21 No No \n", 429 | "22 No No \n", 430 | "23 No No \n", 431 | "24 No No \n", 432 | "25 No No \n", 433 | "26 ppc64le No \n", 434 | "27 Yes No \n", 435 | "28 No No \n", 436 | "29 No No \n", 437 | "30 Test release[160] No \n", 438 | "31 Discontinued3[164] No \n", 439 | "32 No Discontinued4.0-4.25.1-6.2 \n", 440 | "33 Yes3+ No \n", 441 | "34 No No \n", 442 | "35 No No \n", 443 | "36 No No \n", 444 | "37 No Discontinued?[172] \n", 445 | "38 No No \n", 446 | "39 No No \n", 447 | "40 Yes No \n", 448 | "41 No No \n", 449 | "42 No No \n", 450 | "43 Yes No \n", 451 | "44 No No \n", 452 | "45 Unofficial[178] No \n", 453 | "46 No No \n", 454 | "47 Yes No \n", 455 | "48 ppc64 sparc32 \n", 456 | "\n", 457 | " sparc64 hppa[117] \\\n", 458 | "0 No No \n", 459 | "1 No No \n", 460 | "2 No No \n", 461 | "3 No No \n", 462 | "4 No No \n", 463 | "5 No No \n", 464 | "6 No No \n", 465 | "7 No No \n", 466 | "8 No No \n", 467 | "9 No No \n", 468 | "10 Discontinued-7[135] Discontinued3.0-5.0 \n", 469 | "11 No No \n", 470 | "12 No No \n", 471 | "13 No No \n", 472 | "14 Inactive from Fedora 12[140] No \n", 473 | "15 No No \n", 474 | "16 Yes Yes \n", 475 | "17 No No \n", 476 | "18 No No \n", 477 | "19 No No \n", 478 | "20 No No \n", 479 | "21 No No \n", 480 | "22 No No \n", 481 | "23 No No \n", 482 | "24 No No \n", 483 | "25 No No \n", 484 | "26 No No \n", 485 | "27 No No \n", 486 | "28 No No \n", 487 | "29 No No \n", 488 | "30 No No \n", 489 | "31 No No \n", 490 | "32 Test release5.1[166] No \n", 491 | "33 No No \n", 492 | "34 No No \n", 493 | "35 No No \n", 494 | "36 No No \n", 495 | "37 No No \n", 496 | "38 No No \n", 497 | "39 No No \n", 498 | "40 No No \n", 499 | "41 No No \n", 500 | "42 No No \n", 501 | "43 No No \n", 502 | "44 No No \n", 503 | "45 No No \n", 504 | "46 No No \n", 505 | "47 No No \n", 506 | "48 sparc64 hppa \n", 507 | "\n", 508 | " loongson mips[118] \\\n", 509 | "0 No No \n", 510 | "1 Discontinued. Unofficial port[124] No \n", 511 | "2 No No \n", 512 | "3 No No \n", 513 | "4 No No \n", 514 | "5 No No \n", 515 | "6 No No \n", 516 | "7 No No \n", 517 | "8 No No \n", 518 | "9 No No \n", 519 | "10 Yes Yes3.0+ \n", 520 | "11 No No \n", 521 | "12 No No \n", 522 | "13 No No \n", 523 | "14 In progress Inactive from Fedora 13[141] \n", 524 | "15 No No \n", 525 | "16 Yes[145] Yes[146][147] \n", 526 | "17 Yes Yes \n", 527 | "18 No No \n", 528 | "19 No No \n", 529 | "20 No No \n", 530 | "21 No Yes XBurst \n", 531 | "22 No No \n", 532 | "23 No No \n", 533 | "24 No No \n", 534 | "25 No No \n", 535 | "26 No No \n", 536 | "27 No No \n", 537 | "28 No Yes \n", 538 | "29 No No \n", 539 | "30 Discontinued[161] Discontinued[161] \n", 540 | "31 No No \n", 541 | "32 No Test release5.1[166] \n", 542 | "33 No No \n", 543 | "34 No No \n", 544 | "35 No No \n", 545 | "36 No No \n", 546 | "37 No No \n", 547 | "38 No No \n", 548 | "39 ? No \n", 549 | "40 No No \n", 550 | "41 No No \n", 551 | "42 No No \n", 552 | "43 No No \n", 553 | "44 In progress No \n", 554 | "45 No No \n", 555 | "46 No No \n", 556 | "47 No No \n", 557 | "48 loongson mips \n", 558 | "\n", 559 | " sh s390 \\\n", 560 | "0 No No \n", 561 | "1 No No \n", 562 | "2 No No \n", 563 | "3 No No \n", 564 | "4 No No \n", 565 | "5 No No \n", 566 | "6 No Discontinued3.5-3.84.1-4.7[127][129] \n", 567 | "7 No No \n", 568 | "8 No No \n", 569 | "9 No No \n", 570 | "10 In progress Discontinued3.0-7 \n", 571 | "11 No No \n", 572 | "12 No No \n", 573 | "13 No No \n", 574 | "14 No No \n", 575 | "15 No No \n", 576 | "16 Yes Yes \n", 577 | "17 No No \n", 578 | "18 No No \n", 579 | "19 No No \n", 580 | "20 No No \n", 581 | "21 No No \n", 582 | "22 No No \n", 583 | "23 No No \n", 584 | "24 No No \n", 585 | "25 No No \n", 586 | "26 No No \n", 587 | "27 No No \n", 588 | "28 Yes No \n", 589 | "29 No No \n", 590 | "30 No No \n", 591 | "31 No No \n", 592 | "32 No Discontinued7.2 \n", 593 | "33 No Discontinued3-4[171] \n", 594 | "34 No No \n", 595 | "35 No No \n", 596 | "36 No No \n", 597 | "37 No Discontinued?[173] \n", 598 | "38 No No \n", 599 | "39 No No \n", 600 | "40 No No \n", 601 | "41 No No \n", 602 | "42 No No \n", 603 | "43 No No \n", 604 | "44 No No \n", 605 | "45 No No \n", 606 | "46 No No \n", 607 | "47 No No \n", 608 | "48 sh s390 \n", 609 | "\n", 610 | " s390x alpha[119] \\\n", 611 | "0 Yes No \n", 612 | "1 No No \n", 613 | "2 No No \n", 614 | "3 No No \n", 615 | "4 No No \n", 616 | "5 No No \n", 617 | "6 Discontinued3.5-3.84.1-4.7[127][129] Discontinued4.2-4.3[127][130][131] \n", 618 | "7 No No \n", 619 | "8 No No \n", 620 | "9 No No \n", 621 | "10 Yes7+ Discontinued2.1-5.0 \n", 622 | "11 No No \n", 623 | "12 No No \n", 624 | "13 No No \n", 625 | "14 Yes No \n", 626 | "15 No No \n", 627 | "16 Yes Yes \n", 628 | "17 No No \n", 629 | "18 No No \n", 630 | "19 No No \n", 631 | "20 No No \n", 632 | "21 No No \n", 633 | "22 No No \n", 634 | "23 No No \n", 635 | "24 No No \n", 636 | "25 No No \n", 637 | "26 No No \n", 638 | "27 Yes No \n", 639 | "28 No No \n", 640 | "29 No No \n", 641 | "30 No No \n", 642 | "31 No No \n", 643 | "32 Yes Discontinued2.1-7.1 \n", 644 | "33 Yes3+ No \n", 645 | "34 No No \n", 646 | "35 No No \n", 647 | "36 No No \n", 648 | "37 Discontinued?[173] Discontinued8.1[174] \n", 649 | "38 No No \n", 650 | "39 No No \n", 651 | "40 Yes No \n", 652 | "41 No No \n", 653 | "42 No No \n", 654 | "43 Ubuntu only, 16.04+[177] No \n", 655 | "44 No No \n", 656 | "45 No No \n", 657 | "46 No No \n", 658 | "47 No No \n", 659 | "48 s390x alpha \n", 660 | "\n", 661 | " m68k[120] riscv \n", 662 | "0 No No \n", 663 | "1 No No \n", 664 | "2 No No \n", 665 | "3 No No \n", 666 | "4 No No \n", 667 | "5 No No \n", 668 | "6 No No \n", 669 | "7 No No \n", 670 | "8 No No \n", 671 | "9 No No \n", 672 | "10 Discontinued2.0-3.1 In progress[136] \n", 673 | "11 No No \n", 674 | "12 No No \n", 675 | "13 No No \n", 676 | "14 No In progress[142] \n", 677 | "15 No No \n", 678 | "16 Yes Test release[148] \n", 679 | "17 No No \n", 680 | "18 No In progress[150] \n", 681 | "19 No In progress[152] \n", 682 | "20 No No \n", 683 | "21 No No \n", 684 | "22 No No \n", 685 | "23 No No \n", 686 | "24 No No \n", 687 | "25 No No \n", 688 | "26 No No \n", 689 | "27 No RV64G \n", 690 | "28 No No \n", 691 | "29 No No \n", 692 | "30 No Test release[162] \n", 693 | "31 No No \n", 694 | "32 Test release5.1[166] No \n", 695 | "33 No No \n", 696 | "34 No No \n", 697 | "35 No No \n", 698 | "36 No No \n", 699 | "37 No No \n", 700 | "38 No No \n", 701 | "39 No No \n", 702 | "40 No No \n", 703 | "41 No No \n", 704 | "42 No No \n", 705 | "43 No No \n", 706 | "44 No No \n", 707 | "45 No No \n", 708 | "46 No No \n", 709 | "47 No No \n", 710 | "48 m68k riscv \n", 711 | "*********************\n", 712 | "6\n", 713 | " Distribution Free software repositories \\\n", 714 | "0 Alpine Linux Free, and nonfree \n", 715 | "1 ALT Linux Free, and nonfree \n", 716 | "2 Arch Linux Free, and nonfree \n", 717 | "3 BLAG Free only \n", 718 | "4 Bodhi Linux Free, and nonfree \n", 719 | "5 CentOS Free, and nonfree \n", 720 | "6 Chakra Free, and nonfree \n", 721 | "7 ClearOS Free, and nonfree \n", 722 | "8 Clear Linux OS ? \n", 723 | "9 CrunchBang Linux Free, and nonfree \n", 724 | "10 Debian Free, and nonfree \n", 725 | "11 Devuan Free, and nonfree \n", 726 | "12 Dragora GNU/Linux-Libre Free only \n", 727 | "13 dyne:bolic Free only \n", 728 | "14 Fedora Free, and nonfree \n", 729 | "15 Gentoo Free, and nonfree \n", 730 | "16 gNewSense Free only \n", 731 | "17 Guix System Free only \n", 732 | "18 Hyperbola GNU/Linux-libre Free only \n", 733 | "19 Knoppix Free, and nonfree \n", 734 | "20 LibreCMC Free only \n", 735 | "21 Linux Mint Free, and nonfree \n", 736 | "22 Mageia Free, and nonfree \n", 737 | "23 Mandriva Linux Free, and nonfree \n", 738 | "24 Manjaro Linux Free, and nonfree \n", 739 | "25 MEPIS Free, and nonfree \n", 740 | "26 Musix GNU+Linux Free only \n", 741 | "27 OpenELEC Free, and nonfree \n", 742 | "28 openSUSE Free, and nonfree \n", 743 | "29 OpenWrt Free, and nonfree \n", 744 | "30 Parabola GNU/Linux-libre Free only \n", 745 | "31 Pardus Free, and nonfree \n", 746 | "32 Parsix Free, and nonfree \n", 747 | "33 PCLinuxOS Free, and nonfree \n", 748 | "34 Puppy Free, and nonfree \n", 749 | "35 Red Hat Enterprise Linux Free, and nonfree \n", 750 | "36 Rxart Free, and nonfree \n", 751 | "37 Sabayon Linux Free, and nonfree \n", 752 | "38 Scientific Free, and nonfree \n", 753 | "39 Slackware Free, and nonfree \n", 754 | "40 Slax Free, and nonfree \n", 755 | "41 SliTaz GNU/Linux Free, and nonfree \n", 756 | "42 Solus Free, and nonfree \n", 757 | "43 Source Mage GNU/Linux Free, and nonfree \n", 758 | "44 SUSE Linux Free, and nonfree \n", 759 | "45 Tiny Core Linux Free, and nonfree \n", 760 | "46 Tiny SliTaz Free, and nonfree \n", 761 | "47 Trisquel Free only \n", 762 | "48 TurnKey GNU/Linux Free, and nonfree \n", 763 | "49 Ubuntu, Kubuntu, Xubuntu Free, and nonfree \n", 764 | "50 Ututo Free only \n", 765 | "51 Vector Linux Free, and nonfree \n", 766 | "52 Void Linux Free, nonfree and multilib \n", 767 | "53 XBMC Live Free, and nonfree \n", 768 | "54 Zentyal Free, and nonfree \n", 769 | "55 Zenwalk Free, and nonfree \n", 770 | "56 Distribution Free software repositories \n", 771 | "\n", 772 | " Approximate number of pre-compiled packages \\\n", 773 | "0 13,888[179][180] \n", 774 | "1 8,300[181] \n", 775 | "2 11,573[182][183] \n", 776 | "3 10,000[189] \n", 777 | "4 [a][190] \n", 778 | "5 6,813[b][191] \n", 779 | "6 3,074[192] \n", 780 | "7 [c] \n", 781 | "8 ? \n", 782 | "9 [d][190] \n", 783 | "10 89,889[190] \n", 784 | "11 [f][190] \n", 785 | "12 484 \n", 786 | "13 ? \n", 787 | "14 64,362[194] \n", 788 | "15 10,000[196] \n", 789 | "16 ? \n", 790 | "17 18,921[198] \n", 791 | "18 14,494[202] \n", 792 | "19 [i][190] \n", 793 | "20 826 \n", 794 | "21 [j][190] \n", 795 | "22 17,283 (i586), 11,409 (x86-64)[203] \n", 796 | "23 22600 \n", 797 | "24 ? \n", 798 | "25 [l][190] \n", 799 | "26 1819 \n", 800 | "27 140[207] \n", 801 | "28 42,236 with PackMan[208] \n", 802 | "29 2000 \n", 803 | "30 23,000[209] \n", 804 | "31 4000 \n", 805 | "32 [m][190] \n", 806 | "33 12000 \n", 807 | "34 700 \n", 808 | "35 3,000 (plus 9,155 from EPEL[210]) \n", 809 | "36 [n][190] \n", 810 | "37 [o] \n", 811 | "38 [p] \n", 812 | "39 2292 \n", 813 | "40 2050 \n", 814 | "41 3,381[213] \n", 815 | "42 9500 \n", 816 | "43 118 \n", 817 | "44 24094 \n", 818 | "45 25160 \n", 819 | "46 50 \n", 820 | "47 52,748[215] \n", 821 | "48 [q][190] (plus ≈30 custom packages) \n", 822 | "49 93,920[s][190][216] \n", 823 | "50 5000 \n", 824 | "51 ? \n", 825 | "52 6000 \n", 826 | "53 ? \n", 827 | "54 [u][190] \n", 828 | "55 2000 \n", 829 | "56 Approximate number of pre-compiled packages \n", 830 | "\n", 831 | " Approximate number of source packages \\\n", 832 | "0 ? \n", 833 | "1 ? \n", 834 | "2 74,786 from AUR[184][185] \n", 835 | "3 ? \n", 836 | "4 ? \n", 837 | "5 ? \n", 838 | "6 CCR: 5,342[193] \n", 839 | "7 ? \n", 840 | "8 ? \n", 841 | "9 ? \n", 842 | "10 28,923[e] \n", 843 | "11 ? \n", 844 | "12 ? \n", 845 | "13 ? \n", 846 | "14 30,681[195] \n", 847 | "15 19,092[197][g] \n", 848 | "16 ? \n", 849 | "17 18921 \n", 850 | "18 ? \n", 851 | "19 ? \n", 852 | "20 ? \n", 853 | "21 ? \n", 854 | "22 8,834[204] \n", 855 | "23 ? \n", 856 | "24 [k][185] \n", 857 | "25 ? \n", 858 | "26 ? \n", 859 | "27 ? \n", 860 | "28 34000 \n", 861 | "29 ? \n", 862 | "30 ? \n", 863 | "31 ? \n", 864 | "32 14900 \n", 865 | "33 ? \n", 866 | "34 ? \n", 867 | "35 ? \n", 868 | "36 ? \n", 869 | "37 ? \n", 870 | "38 ? \n", 871 | "39 7,705 from SlackBuilds[211] \n", 872 | "40 ? \n", 873 | "41 ? \n", 874 | "42 ? \n", 875 | "43 8876 \n", 876 | "44 11385 \n", 877 | "45 ? \n", 878 | "46 ? \n", 879 | "47 ? \n", 880 | "48 21,041[r] (currently TurnKey only supplies sou... \n", 881 | "49 24,474[t] \n", 882 | "50 ? \n", 883 | "51 ? \n", 884 | "52 6719 \n", 885 | "53 ? \n", 886 | "54 ? \n", 887 | "55 ? \n", 888 | "56 Approximate number of source packages \n", 889 | "\n", 890 | " Default package management tool(s) Package format \\\n", 891 | "0 apk .apk \n", 892 | "1 APT (APT-RPM), RPM RPM \n", 893 | "2 Pacman .pkg.tar.zst[186] \n", 894 | "3 RPM, yum, APT RPM \n", 895 | "4 APT .dpkg \n", 896 | "5 RPM, yum/up2date RPM \n", 897 | "6 Pacman (will be replaced by Akabei in future) .pkg.tar.xz \n", 898 | "7 RPM, yum RPM \n", 899 | "8 ? ? \n", 900 | "9 APT .deb \n", 901 | "10 APT .deb \n", 902 | "11 APT .deb \n", 903 | "12 pkgsystem .tlz \n", 904 | "13 APT .deb \n", 905 | "14 DNF, yum, PackageKit RPM \n", 906 | "15 Portage .ebuild, .tbz2 \n", 907 | "16 APT .deb \n", 908 | "17 Guix .scm, .go \n", 909 | "18 Pacman .pkg.tar.xz \n", 910 | "19 APT .deb \n", 911 | "20 ? ? \n", 912 | "21 APT .deb \n", 913 | "22 urpmi, rpmdrake RPM \n", 914 | "23 urpmi, rpmdrake RPM \n", 915 | "24 Pacman .pkg.tar.xz \n", 916 | "25 APT .deb \n", 917 | "26 APT .deb \n", 918 | "27 XBMCbuntu addon manager, own and 3rd party addons .zip \n", 919 | "28 YaST, Zypper RPM \n", 920 | "29 opkg .ipk \n", 921 | "30 Pacman .pkg.tar.xz \n", 922 | "31 PiSi .pisi \n", 923 | "32 APT .deb \n", 924 | "33 APT, RPM RPM \n", 925 | "34 PupGet, DotPup .pup, .pet \n", 926 | "35 RPM, yum RPM \n", 927 | "36 APT .deb \n", 928 | "37 Portage, Entropy ebuild, .tbz2 \n", 929 | "38 APT/yum RPM \n", 930 | "39 slackpkg tgz, .txz, .tlz, .tbz \n", 931 | "40 none .lzm \n", 932 | "41 Tazpkg .tazpkg \n", 933 | "42 eopkg .eopkg \n", 934 | "43 Sorcery Package Manager src \n", 935 | "44 YaST, Zypper RPM \n", 936 | "45 ab, tce-load tcz \n", 937 | "46 Web site[214] tazpkg \n", 938 | "47 APT .deb \n", 939 | "48 APT .deb \n", 940 | "49 APT .deb \n", 941 | "50 UTUTO Package Manager ebuild \n", 942 | "51 slapt-get, gslapt, installpkg tgz \n", 943 | "52 xbps .xbps \n", 944 | "53 APT .deb \n", 945 | "54 APT .deb \n", 946 | "55 netpkg, installpkg, upgradepkg tgz, txz \n", 947 | "56 Default package management tools Package format \n", 948 | "\n", 949 | " Default installer \\\n", 950 | "0 setup-alpine \n", 951 | "1 NaN \n", 952 | "2 arch-install-scripts[187] and archinstaller[188] \n", 953 | "3 NaN \n", 954 | "4 Ubiquity \n", 955 | "5 Anaconda \n", 956 | "6 NaN \n", 957 | "7 NaN \n", 958 | "8 ? \n", 959 | "9 NaN \n", 960 | "10 Debian-Installer \n", 961 | "11 Debian-Installer \n", 962 | "12 ? \n", 963 | "13 Debian-Installer \n", 964 | "14 Anaconda \n", 965 | "15 None (third-party install scripts only) \n", 966 | "16 Debian-Installer \n", 967 | "17 guix system init[199] \n", 968 | "18 None (third-party install scripts only) \n", 969 | "19 NaN \n", 970 | "20 NaN \n", 971 | "21 Ubiquity \n", 972 | "22 DrakX \n", 973 | "23 DrakX \n", 974 | "24 Calamares[205] \n", 975 | "25 MEPIS Install \n", 976 | "26 Debian-Installer \n", 977 | "27 NaN \n", 978 | "28 YaST \n", 979 | "29 - \n", 980 | "30 None (third-party install scripts only) or Cal... \n", 981 | "31 YALI \n", 982 | "32 NaN \n", 983 | "33 NaN \n", 984 | "34 NaN \n", 985 | "35 Anaconda \n", 986 | "36 NaN \n", 987 | "37 Calamares \n", 988 | "38 NaN \n", 989 | "39 bash script[212] \n", 990 | "40 NaN \n", 991 | "41 tazinst \n", 992 | "42 os-installer \n", 993 | "43 NaN \n", 994 | "44 YaST \n", 995 | "45 tc-install, core2usb \n", 996 | "46 NaN \n", 997 | "47 Ubiquity \n", 998 | "48 DI-Live (custom fork of Debian Installer) \n", 999 | "49 Ubiquity \n", 1000 | "50 ? \n", 1001 | "51 NaN \n", 1002 | "52 ncurses script \n", 1003 | "53 NaN \n", 1004 | "54 dpkg \n", 1005 | "55 NaN \n", 1006 | "56 Default installer \n", 1007 | "\n", 1008 | " Graphical installation process Netinstall Netboot \n", 1009 | "0 No ? ? \n", 1010 | "1 Yes ? ? \n", 1011 | "2 No Yes iPXE \n", 1012 | "3 Yes No No \n", 1013 | "4 Yes ? ? \n", 1014 | "5 Yes Yes ? \n", 1015 | "6 Package manager in development ? ? \n", 1016 | "7 No ? ? \n", 1017 | "8 ? ? ? \n", 1018 | "9 Yes ? ? \n", 1019 | "10 Yes Yes PXE \n", 1020 | "11 Yes Yes PXE \n", 1021 | "12 No No No \n", 1022 | "13 Yes No No \n", 1023 | "14 Yes Yes ? \n", 1024 | "15 Yes[h] Yes PXE \n", 1025 | "16 Yes Yes No \n", 1026 | "17 Yes[200] Yes[201] No \n", 1027 | "18 No Yes ? \n", 1028 | "19 No ? ? \n", 1029 | "20 No No No \n", 1030 | "21 Yes ? ? \n", 1031 | "22 Yes Yes ? \n", 1032 | "23 Yes ? ? \n", 1033 | "24 Yes[206] Yes iPXE \n", 1034 | "25 Yes ? ? \n", 1035 | "26 Yes No No \n", 1036 | "27 Yes ? ? \n", 1037 | "28 Yes Yes ? \n", 1038 | "29 No ? ? \n", 1039 | "30 Yes Yes ? \n", 1040 | "31 Yes ? ? \n", 1041 | "32 Yes ? ? \n", 1042 | "33 Yes ? ? \n", 1043 | "34 Yes ? ? \n", 1044 | "35 Yes ? ? \n", 1045 | "36 Yes ? ? \n", 1046 | "37 Yes ? ? \n", 1047 | "38 Yes ? ? \n", 1048 | "39 No Yes Yes \n", 1049 | "40 NaN ? ? \n", 1050 | "41 Yes iPXE iPXE \n", 1051 | "42 Yes No No \n", 1052 | "43 Yes ? ? \n", 1053 | "44 Yes ? ? \n", 1054 | "45 Yes ? ? \n", 1055 | "46 No ? iPXE \n", 1056 | "47 Yes Yes ? \n", 1057 | "48 No No No \n", 1058 | "49 Yes Yes PXE \n", 1059 | "50 ? No No \n", 1060 | "51 Yes ? ? \n", 1061 | "52 Yes Yes No \n", 1062 | "53 No ? ? \n", 1063 | "54 Yes ? ? \n", 1064 | "55 Yes ? ? \n", 1065 | "56 Graphical installation process Netinstall Netboot \n", 1066 | "*********************\n", 1067 | "7\n", 1068 | " Distribution \\\n", 1069 | "0 Arch Linux \n", 1070 | "1 AUSTRUMI \n", 1071 | "2 BLAG Linux and GNU \n", 1072 | "3 Bodhi Linux \n", 1073 | "4 CentOS \n", 1074 | "5 Chakra \n", 1075 | "6 Clear Linux OS \n", 1076 | "7 Debian \n", 1077 | "8 Devuan \n", 1078 | "9 Dragora GNU/Linux-Libre \n", 1079 | "10 dyne:bolic \n", 1080 | "11 Fedora \n", 1081 | "12 Gentoo \n", 1082 | "13 gNewSense[217] \n", 1083 | "14 Grml \n", 1084 | "15 Guix System[218] \n", 1085 | "16 Hyperbola GNU/Linux-libre \n", 1086 | "17 Knoppix CD \n", 1087 | "18 Knoppix DVD \n", 1088 | "19 LibreCMC \n", 1089 | "20 Mandriva Linux One \n", 1090 | "21 Manjaro Linux \n", 1091 | "22 MEPIS \n", 1092 | "23 Musix GNU+Linux \n", 1093 | "24 Nanolinux \n", 1094 | "25 openGEU \n", 1095 | "26 openSUSE (Not 42.1) \n", 1096 | "27 OpenWrt \n", 1097 | "28 Parabola GNU/Linux-libre \n", 1098 | "29 Pardus \n", 1099 | "30 PCLinuxOS \n", 1100 | "31 Pentoo \n", 1101 | "32 Porteus \n", 1102 | "33 Puppy Linux (Slacko) \n", 1103 | "34 Puredyne \n", 1104 | "35 Sabayon Linux Live CD \n", 1105 | "36 Sabayon Linux Live DVD \n", 1106 | "37 Scientific Linux \n", 1107 | "38 Slackware \n", 1108 | "39 Slax \n", 1109 | "40 Solus \n", 1110 | "41 SystemRescueCD \n", 1111 | "42 SliTaz GNU/Linux \n", 1112 | "43 Tails \n", 1113 | "44 Tiny Core Linux \n", 1114 | "45 Tiny SliTaz \n", 1115 | "46 Trisquel \n", 1116 | "47 TurnKey GNU/Linux Core (base) appliance ISO \n", 1117 | "48 Ubuntu \n", 1118 | "49 Ututo \n", 1119 | "50 Edubuntu \n", 1120 | "51 Kubuntu \n", 1121 | "52 XBMC Live \n", 1122 | "53 Zentyal \n", 1123 | "54 Xubuntu \n", 1124 | "55 Distribution \n", 1125 | "\n", 1126 | " Size of media (MB) RAM use (MB) Boots from CD \\\n", 1127 | "0 742 minimum 80 Yes \n", 1128 | "1 301 NaN Yes \n", 1129 | "2 696 ? Yes \n", 1130 | "3 1024 80 Yes \n", 1131 | "4 603 (Minimal) 4,096 (DVD) NaN Yes \n", 1132 | "5 2150 NaN No \n", 1133 | "6 ? ? ? \n", 1134 | "7 958 NaN Yes \n", 1135 | "8 868 NaN Yes \n", 1136 | "9 655 ? Yes \n", 1137 | "10 1650 ? up to version 2.x \n", 1138 | "11 1434 256 to 1,024 Yes \n", 1139 | "12 260 (Minimal) 2,048 (Live DVD) up to 128 Yes \n", 1140 | "13 1200 512 ? \n", 1141 | "14 460 32 to 128 Yes \n", 1142 | "15 612 146 No \n", 1143 | "16 660 and 688 ? Yes \n", 1144 | "17 700 128 to 320 Yes \n", 1145 | "18 4813 128 to 500 No \n", 1146 | "19 ? ? No \n", 1147 | "20 700 128 to 768 Yes \n", 1148 | "21 473 to 2,200[219] 256 to 1,024 Yes \n", 1149 | "22 700 to 4,000 128 to 512 Yes \n", 1150 | "23 2000 ? No \n", 1151 | "24 18 ≈64 Yes \n", 1152 | "25 700 192 to 512 Yes \n", 1153 | "26 700 128 to 768 Yes \n", 1154 | "27 min 4 min 16 No \n", 1155 | "28 400 to 3,300 ? Yes \n", 1156 | "29 1,256 to 1,276 256 to 1,024 Yes \n", 1157 | "30 130 to 700 96 to 512 Yes \n", 1158 | "31 666 and 700 48 to 96 Yes \n", 1159 | "32 224 to 373 min 36 ? \n", 1160 | "33 235 32 to 192 Yes \n", 1161 | "34 542 NaN Yes \n", 1162 | "35 695 NaN Yes \n", 1163 | "36 2400 NaN No \n", 1164 | "37 431 to 2,300[221] 640 Yes \n", 1165 | "38 2600 64 to 1,024[222] Yes \n", 1166 | "39 200 96 to 320 Yes \n", 1167 | "40 1200 1024 No \n", 1168 | "41 459 NaN Yes \n", 1169 | "42 50 48 to 256 Yes \n", 1170 | "43 ≈900 ≈1,024 No \n", 1171 | "44 16 46 Yes \n", 1172 | "45 1.44 4 Yes \n", 1173 | "46 1,500[223] 384 Yes \n", 1174 | "47 212 ~173 Yes \n", 1175 | "48 1,700[224] 384 Yes \n", 1176 | "49 3500 ? No \n", 1177 | "50 2,900[225] NaN Yes \n", 1178 | "51 1,400[226] 384 Yes \n", 1179 | "52 700 256 to 1,024 Yes \n", 1180 | "53 600 256 Yes \n", 1181 | "54 1,200[227] 256 Yes \n", 1182 | "55 Size of media (MB) RAM use (MB) Boots from CD \n", 1183 | "\n", 1184 | " Boots from DVD Installable live CD/DVD Installable from USB \n", 1185 | "0 Yes Yes Yes \n", 1186 | "1 Yes Yes Yes \n", 1187 | "2 No ? NaN \n", 1188 | "3 Yes Yes Yes \n", 1189 | "4 Yes Yes (installable since 6.0) Yes \n", 1190 | "5 Yes Yes Yes \n", 1191 | "6 ? ? ? \n", 1192 | "7 Yes Yes Yes \n", 1193 | "8 Yes Yes Yes \n", 1194 | "9 ? ? ? \n", 1195 | "10 Yes ? ? \n", 1196 | "11 Yes Yes Yes \n", 1197 | "12 Yes Yes Yes \n", 1198 | "13 ? Yes ? \n", 1199 | "14 No Yes Yes \n", 1200 | "15 Yes Yes Yes \n", 1201 | "16 Yes Yes Yes \n", 1202 | "17 Yes Only DVD edition is maintained NaN \n", 1203 | "18 Yes NaN NaN \n", 1204 | "19 No No No \n", 1205 | "20 Yes Yes Yes \n", 1206 | "21 Yes Yes Yes \n", 1207 | "22 Yes Yes Yes \n", 1208 | "23 Yes Yes Yes \n", 1209 | "24 Yes Yes Yes \n", 1210 | "25 NaN Yes NaN \n", 1211 | "26 Yes Yes Yes \n", 1212 | "27 No No No \n", 1213 | "28 Yes Yes Yes \n", 1214 | "29 Yes Yes Yes \n", 1215 | "30 Yes Yes Yes \n", 1216 | "31 Yes By hand[220] By hand \n", 1217 | "32 ? Yes Yes \n", 1218 | "33 Yes Yes Yes \n", 1219 | "34 Yes Yes Yes \n", 1220 | "35 Yes Yes Yes \n", 1221 | "36 Yes Yes Yes \n", 1222 | "37 Yes Yes Yes \n", 1223 | "38 Yes Yes Yes \n", 1224 | "39 Yes NaN Yes \n", 1225 | "40 Yes Yes Yes \n", 1226 | "41 Yes Yes Yes \n", 1227 | "42 Yes Yes Yes \n", 1228 | "43 Yes Yes Yes (when run from DVD) \n", 1229 | "44 Yes Yes Yes \n", 1230 | "45 Yes By SliTaz By SliTaz \n", 1231 | "46 Yes Yes Yes \n", 1232 | "47 Yes Yes Yes \n", 1233 | "48 Yes Yes Yes \n", 1234 | "49 Yes Yes ? \n", 1235 | "50 Yes Yes NaN \n", 1236 | "51 Yes Yes Yes \n", 1237 | "52 No Yes Yes \n", 1238 | "53 Yes Yes Yes \n", 1239 | "54 Yes Yes Yes \n", 1240 | "55 Boots from DVD Installable live CD/DVD Installable from USB \n", 1241 | "*********************\n", 1242 | "8\n", 1243 | " Distribution Compile time buffer checks \\\n", 1244 | "0 Alpine Linux Yes[228] \n", 1245 | "1 BLAG Un­known \n", 1246 | "2 Android (operating system) Yes \n", 1247 | "3 Clear Linux OS Un­known \n", 1248 | "4 Debian Yes \n", 1249 | "5 Dragora GNU/Linux-Libre Un­known \n", 1250 | "6 dyne:bolic Un­known \n", 1251 | "7 Fedora Yes \n", 1252 | "8 Gentoo Optional \n", 1253 | "9 gNewSense Un­known \n", 1254 | "10 Guix System Un­known \n", 1255 | "11 LibreCMC Un­known \n", 1256 | "12 Mandriva Un­known \n", 1257 | "13 Musix GNU+Linux Un­known \n", 1258 | "14 Parabola GNU/Linux-libre Un­known \n", 1259 | "15 Slackware Un­known \n", 1260 | "16 SUSE Linux Yes \n", 1261 | "17 Solus Yes \n", 1262 | "18 Trisquel Un­known \n", 1263 | "19 Ubuntu Yes[234] \n", 1264 | "20 Ututo Un­known \n", 1265 | "\n", 1266 | " Mandatory access control \\\n", 1267 | "0 Un­known \n", 1268 | "1 Un­known \n", 1269 | "2 Yes, since Android Marshmallow \n", 1270 | "3 Un­known \n", 1271 | "4 SELinux, AppArmor \n", 1272 | "5 Un­known \n", 1273 | "6 Un­known \n", 1274 | "7 SELinux[229] \n", 1275 | "8 SELinux, AppArmor \n", 1276 | "9 SELinux, AppArmor[v] \n", 1277 | "10 Un­known \n", 1278 | "11 Un­known \n", 1279 | "12 AppArmor \n", 1280 | "13 Un­known \n", 1281 | "14 Optional[231] \n", 1282 | "15 AppArmor, tomoyo \n", 1283 | "16 AppArmor[232] \n", 1284 | "17 AppArmor \n", 1285 | "18 SELinux, AppArmor[w] \n", 1286 | "19 SELinux, AppArmor [234] \n", 1287 | "20 Un­known \n", 1288 | "\n", 1289 | " Software executable space protection grsecurity \\\n", 1290 | "0 PaX Discontinued in 3.8.0 \n", 1291 | "1 Un­known Un­known \n", 1292 | "2 Optional Optional \n", 1293 | "3 Un­known Un­known \n", 1294 | "4 PaX optional Optional \n", 1295 | "5 Un­known Un­known \n", 1296 | "6 Un­known Un­known \n", 1297 | "7 Exec Shield[230] No \n", 1298 | "8 PaX optional Optional \n", 1299 | "9 Un­known Un­known \n", 1300 | "10 Un­known Un­known \n", 1301 | "11 Un­known Un­known \n", 1302 | "12 Un­known Un­known \n", 1303 | "13 Un­known Un­known \n", 1304 | "14 Un­known Optional[231] \n", 1305 | "15 Un­known Un­known \n", 1306 | "16 Hardware NX and other methods in mainline kern... No \n", 1307 | "17 Un­known No \n", 1308 | "18 Un­known Un­known \n", 1309 | "19 PaX optional Optional \n", 1310 | "20 Un­known Un­known \n", 1311 | "\n", 1312 | " RSBAC \n", 1313 | "0 Un­known \n", 1314 | "1 Un­known \n", 1315 | "2 Optional \n", 1316 | "3 Un­known \n", 1317 | "4 Optional \n", 1318 | "5 Un­known \n", 1319 | "6 Un­known \n", 1320 | "7 No \n", 1321 | "8 Optional \n", 1322 | "9 Un­known \n", 1323 | "10 Un­known \n", 1324 | "11 Un­known \n", 1325 | "12 Yes \n", 1326 | "13 Un­known \n", 1327 | "14 Un­known \n", 1328 | "15 Optional \n", 1329 | "16 No \n", 1330 | "17 Un­known \n", 1331 | "18 Un­known \n", 1332 | "19 Optional \n", 1333 | "20 Un­known \n", 1334 | "*********************\n", 1335 | "9\n", 1336 | " .mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}.mw-parser-output .infobox .navbar{font-size:100%}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}vteLinux distributions \\\n", 1337 | "0 Android \n", 1338 | "1 Arch \n", 1339 | "2 Debian \n", 1340 | "3 Ubuntu \n", 1341 | "4 Fedora \n", 1342 | "5 Red Hat \n", 1343 | "6 Gentoo \n", 1344 | "7 Slackware \n", 1345 | "8 Mandriva \n", 1346 | "9 Other \n", 1347 | "10 Category List Comparison \n", 1348 | "\n", 1349 | " .mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:\"[ \"}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:\" ]\"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}.mw-parser-output .infobox .navbar{font-size:100%}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}vteLinux distributions.1 \n", 1350 | "0 /e/ Android-IA Android-x86 EMUI Fire OS Graphe... \n", 1351 | "1 ArchBang ArchLabs Artix BlackArch Chakra Endea... \n", 1352 | "2 antiX Astra Bharat Operating System Solutions ... \n", 1353 | "3 Official: Kubuntu Lubuntu Ubuntu Budgie Ubuntu... \n", 1354 | "4 BLAG Linux and GNU Korora Red Hat AlmaLinux Ce... \n", 1355 | "5 AlmaLinux CentOS ClearOS EulerOS Linpus Linux ... \n", 1356 | "6 Calculate Linux Chromium OS Chrome OS Sabayon ... \n", 1357 | "7 Austrumi Linux DNALinux Kongoni NimbleX Platyp... \n", 1358 | "8 ALT Linux Mageia OpenMandriva Lx PCLinuxOS ROS... \n", 1359 | "9 4MLinux Alpine CHAOS Clear Linux OS CRUX GoboL... \n", 1360 | "10 Category List Comparison \n", 1361 | "*********************\n", 1362 | "10\n", 1363 | " 0 1\n", 1364 | "0 Ubuntu Official: Kubuntu Lubuntu Ubuntu Budgie Ubuntu...\n", 1365 | "*********************\n", 1366 | "11\n", 1367 | " 0 1\n", 1368 | "0 Red Hat AlmaLinux CentOS ClearOS EulerOS Linpus Linux ...\n", 1369 | "*********************\n", 1370 | "12\n", 1371 | " vteLinux vteLinux.1\n", 1372 | "0 Linux kernel History Kernel Linus's law Linux-libre Linux s...\n", 1373 | "1 Controversies Criticism of Linux Criticism of desktop Linux ...\n", 1374 | "2 Distributions General comparison Distributions list Netbook-...\n", 1375 | "3 Organizations LinuxChix Linux Counter Linux Documentation Pr...\n", 1376 | "4 Adoption Adopters Desktop Embedded Gaming Mobile Range ...\n", 1377 | "5 Media DistroWatch Free Software Magazine Full Circle...\n", 1378 | "6 Category Portal Category Portal\n", 1379 | "*********************\n", 1380 | "13\n", 1381 | " vteFree and open-source software \\\n", 1382 | "0 General \n", 1383 | "1 Softwarepackages \n", 1384 | "2 Community \n", 1385 | "3 Organisations \n", 1386 | "4 Licenses \n", 1387 | "5 Types and standards \n", 1388 | "6 Challenges \n", 1389 | "7 Related topics \n", 1390 | "8 Portal Category \n", 1391 | "\n", 1392 | " vteFree and open-source software.1 \n", 1393 | "0 Alternative terms for free software Comparison... \n", 1394 | "1 Audio Bioinformatics Codecs Configuration mana... \n", 1395 | "2 Free software movement History Open-source-sof... \n", 1396 | "3 Free Software Movement of India Free Software ... \n", 1397 | "4 AFL Apache APSL Artistic Beerware BSD Creative... \n", 1398 | "5 Comparison of licenses Contributor License Agr... \n", 1399 | "6 Digital rights management Hardware restriction... \n", 1400 | "7 Forking GNU Manifesto Microsoft Open Specifica... \n", 1401 | "8 Portal Category \n", 1402 | "*********************\n", 1403 | "14\n", 1404 | " 0 1\n", 1405 | "0 Types and standards Comparison of licenses Contributor License Agr...\n" 1406 | ] 1407 | } 1408 | ], 1409 | "source": [ 1410 | "import pandas as pd\n", 1411 | "import ssl\n", 1412 | "\n", 1413 | "ssl._create_default_https_context = ssl._create_unverified_context\n", 1414 | "\n", 1415 | "scraped = pd.read_html(\"https://en.wikipedia.org/wiki/Comparison_of_Linux_distributions\")\n", 1416 | "\n", 1417 | "for idx, table in enumerate(scraped):\n", 1418 | " print(\"*********************\")\n", 1419 | " print(idx)\n", 1420 | " print(table)" 1421 | ] 1422 | }, 1423 | { 1424 | "cell_type": "code", 1425 | "execution_count": 6, 1426 | "metadata": {}, 1427 | "outputs": [ 1428 | { 1429 | "data": { 1430 | "text/html": [ 1431 | "
\n", 1432 | "\n", 1445 | "\n", 1446 | " \n", 1447 | " \n", 1448 | " \n", 1449 | " \n", 1450 | " \n", 1451 | " \n", 1452 | " \n", 1453 | " \n", 1454 | " \n", 1455 | " \n", 1456 | " \n", 1457 | " \n", 1458 | " \n", 1459 | " \n", 1460 | " \n", 1461 | " \n", 1462 | " \n", 1463 | " \n", 1464 | " \n", 1465 | " \n", 1466 | " \n", 1467 | " \n", 1468 | " \n", 1469 | " \n", 1470 | " \n", 1471 | " \n", 1472 | " \n", 1473 | " \n", 1474 | " \n", 1475 | " \n", 1476 | " \n", 1477 | " \n", 1478 | " \n", 1479 | " \n", 1480 | " \n", 1481 | " \n", 1482 | " \n", 1483 | " \n", 1484 | " \n", 1485 | " \n", 1486 | " \n", 1487 | " \n", 1488 | " \n", 1489 | " \n", 1490 | " \n", 1491 | " \n", 1492 | " \n", 1493 | " \n", 1494 | " \n", 1495 | " \n", 1496 | " \n", 1497 | " \n", 1498 | " \n", 1499 | " \n", 1500 | " \n", 1501 | " \n", 1502 | " \n", 1503 | " \n", 1504 | " \n", 1505 | " \n", 1506 | " \n", 1507 | " \n", 1508 | " \n", 1509 | " \n", 1510 | " \n", 1511 | " \n", 1512 | " \n", 1513 | " \n", 1514 | " \n", 1515 | " \n", 1516 | " \n", 1517 | " \n", 1518 | " \n", 1519 | " \n", 1520 | " \n", 1521 | " \n", 1522 | " \n", 1523 | " \n", 1524 | " \n", 1525 | " \n", 1526 | " \n", 1527 | " \n", 1528 | " \n", 1529 | " \n", 1530 | " \n", 1531 | " \n", 1532 | " \n", 1533 | " \n", 1534 | " \n", 1535 | " \n", 1536 | " \n", 1537 | " \n", 1538 | " \n", 1539 | " \n", 1540 | " \n", 1541 | " \n", 1542 | " \n", 1543 | " \n", 1544 | " \n", 1545 | " \n", 1546 | " \n", 1547 | " \n", 1548 | " \n", 1549 | " \n", 1550 | " \n", 1551 | " \n", 1552 | " \n", 1553 | " \n", 1554 | " \n", 1555 | " \n", 1556 | " \n", 1557 | " \n", 1558 | " \n", 1559 | " \n", 1560 | " \n", 1561 | " \n", 1562 | " \n", 1563 | " \n", 1564 | " \n", 1565 | " \n", 1566 | " \n", 1567 | " \n", 1568 | " \n", 1569 | " \n", 1570 | " \n", 1571 | " \n", 1572 | " \n", 1573 | " \n", 1574 | " \n", 1575 | " \n", 1576 | " \n", 1577 | " \n", 1578 | " \n", 1579 | " \n", 1580 | " \n", 1581 | " \n", 1582 | " \n", 1583 | " \n", 1584 | " \n", 1585 | " \n", 1586 | " \n", 1587 | " \n", 1588 | " \n", 1589 | " \n", 1590 | " \n", 1591 | " \n", 1592 | " \n", 1593 | " \n", 1594 | " \n", 1595 | " \n", 1596 | " \n", 1597 | " \n", 1598 | " \n", 1599 | " \n", 1600 | " \n", 1601 | " \n", 1602 | " \n", 1603 | " \n", 1604 | " \n", 1605 | " \n", 1606 | " \n", 1607 | " \n", 1608 | " \n", 1609 | " \n", 1610 | " \n", 1611 | " \n", 1612 | " \n", 1613 | " \n", 1614 | " \n", 1615 | " \n", 1616 | " \n", 1617 | " \n", 1618 | " \n", 1619 | " \n", 1620 | " \n", 1621 | " \n", 1622 | " \n", 1623 | " \n", 1624 | " \n", 1625 | " \n", 1626 | " \n", 1627 | " \n", 1628 | " \n", 1629 | " \n", 1630 | "
DistributionFounderMaintainerInitial release yearCurrent stable versionSecurity updates (years)Release dateSystem distribution commitmentForked fromTarget audienceCostStatus
0AlmaLinuxAlmaLinux FoundationAlmaLinux Foundation20218.410 years[2]2021-05-26XRed Hat Enterprise Linux (RHEL)server, workstationNoneActive
1Alpine LinuxAlpine Linux TeamAlpine Linux Team20063.14.1[3]?2021-08-04XLEAF Projectsecurity, lightweight, generalNoneActive
2ALT LinuxALT Linux TeamALT Linux Team, ALT Linux LLC200110.0[4]?2021-12-16XMandrake Linuxgeneral, schoolNoneActive
3antiXAnticapitalistaAnticapitalista200719.4[5]?2021-05-21XDebian, MEPISold computersNoneActive
4ArchBangWillensky AristideStan McLaren2011RollingRolling?XArch Linux (UKM Edition)generalNoneActive
.......................................
92XandrosXandros IncorporatedXandros Incorporated2001??2007-07-26XCorel Linux?CommercialInactive
93ZentyaleBox TechnologieseBox Technologies20056.2[79]?2020-06-04XDebian, Ubuntusmall business serverSome editions are free of charge?
94ZenwalkJean-Philippe Guillemindev team2004Rolling[80]?2020-12-10XSlackwaregeneralNoneActive
95Zorin OSZorin GroupZorin Group2009OS 15.3[81]?2020-10-08XUbuntugeneral, desktopZorin OS Lite & Core are free, while Business ...Active
96DistributionFounderMaintainerInitial release yearCurrent stable versionSecurity updates (years)Release dateSystem distribution commitmentForked fromTarget audienceCostStatus
\n", 1631 | "

97 rows × 12 columns

\n", 1632 | "
" 1633 | ], 1634 | "text/plain": [ 1635 | " Distribution Founder Maintainer \\\n", 1636 | "0 AlmaLinux AlmaLinux Foundation AlmaLinux Foundation \n", 1637 | "1 Alpine Linux Alpine Linux Team Alpine Linux Team \n", 1638 | "2 ALT Linux ALT Linux Team ALT Linux Team, ALT Linux LLC \n", 1639 | "3 antiX Anticapitalista Anticapitalista \n", 1640 | "4 ArchBang Willensky Aristide Stan McLaren \n", 1641 | ".. ... ... ... \n", 1642 | "92 Xandros Xandros Incorporated Xandros Incorporated \n", 1643 | "93 Zentyal eBox Technologies eBox Technologies \n", 1644 | "94 Zenwalk Jean-Philippe Guillemin dev team \n", 1645 | "95 Zorin OS Zorin Group Zorin Group \n", 1646 | "96 Distribution Founder Maintainer \n", 1647 | "\n", 1648 | " Initial release year Current stable version Security updates (years) \\\n", 1649 | "0 2021 8.4 10 years[2] \n", 1650 | "1 2006 3.14.1[3] ? \n", 1651 | "2 2001 10.0[4] ? \n", 1652 | "3 2007 19.4[5] ? \n", 1653 | "4 2011 Rolling Rolling \n", 1654 | ".. ... ... ... \n", 1655 | "92 2001 ? ? \n", 1656 | "93 2005 6.2[79] ? \n", 1657 | "94 2004 Rolling[80] ? \n", 1658 | "95 2009 OS 15.3[81] ? \n", 1659 | "96 Initial release year Current stable version Security updates (years) \n", 1660 | "\n", 1661 | " Release date System distribution commitment \\\n", 1662 | "0 2021-05-26 X \n", 1663 | "1 2021-08-04 X \n", 1664 | "2 2021-12-16 X \n", 1665 | "3 2021-05-21 X \n", 1666 | "4 ? X \n", 1667 | ".. ... ... \n", 1668 | "92 2007-07-26 X \n", 1669 | "93 2020-06-04 X \n", 1670 | "94 2020-12-10 X \n", 1671 | "95 2020-10-08 X \n", 1672 | "96 Release date System distribution commitment \n", 1673 | "\n", 1674 | " Forked from Target audience \\\n", 1675 | "0 Red Hat Enterprise Linux (RHEL) server, workstation \n", 1676 | "1 LEAF Project security, lightweight, general \n", 1677 | "2 Mandrake Linux general, school \n", 1678 | "3 Debian, MEPIS old computers \n", 1679 | "4 Arch Linux (UKM Edition) general \n", 1680 | ".. ... ... \n", 1681 | "92 Corel Linux ? \n", 1682 | "93 Debian, Ubuntu small business server \n", 1683 | "94 Slackware general \n", 1684 | "95 Ubuntu general, desktop \n", 1685 | "96 Forked from Target audience \n", 1686 | "\n", 1687 | " Cost Status \n", 1688 | "0 None Active \n", 1689 | "1 None Active \n", 1690 | "2 None Active \n", 1691 | "3 None Active \n", 1692 | "4 None Active \n", 1693 | ".. ... ... \n", 1694 | "92 Commercial Inactive \n", 1695 | "93 Some editions are free of charge ? \n", 1696 | "94 None Active \n", 1697 | "95 Zorin OS Lite & Core are free, while Business ... Active \n", 1698 | "96 Cost Status \n", 1699 | "\n", 1700 | "[97 rows x 12 columns]" 1701 | ] 1702 | }, 1703 | "execution_count": 6, 1704 | "metadata": {}, 1705 | "output_type": "execute_result" 1706 | } 1707 | ], 1708 | "source": [ 1709 | "scraped[3]" 1710 | ] 1711 | }, 1712 | { 1713 | "cell_type": "code", 1714 | "execution_count": null, 1715 | "metadata": {}, 1716 | "outputs": [], 1717 | "source": [] 1718 | } 1719 | ], 1720 | "metadata": { 1721 | "kernelspec": { 1722 | "display_name": "Python 3 (ipykernel)", 1723 | "language": "python", 1724 | "name": "python3" 1725 | }, 1726 | "language_info": { 1727 | "codemirror_mode": { 1728 | "name": "ipython", 1729 | "version": 3 1730 | }, 1731 | "file_extension": ".py", 1732 | "mimetype": "text/x-python", 1733 | "name": "python", 1734 | "nbconvert_exporter": "python", 1735 | "pygments_lexer": "ipython3", 1736 | "version": "3.9.7" 1737 | } 1738 | }, 1739 | "nbformat": 4, 1740 | "nbformat_minor": 4 1741 | } 1742 | -------------------------------------------------------------------------------- /selector.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | import pandas as pd 3 | 4 | # load database file (make sure you run scraper.py first to create it) 5 | connection = sqlite3.connect("linux_distro.db") 6 | 7 | cursor = connection.cursor() # allows to execute SQL 8 | 9 | # SELECT all the releases from 2008 10 | cursor.execute("select * from linux where Initial_Release_Year=:c", {"c": "2008"}) 11 | for row in cursor: 12 | print(row) 13 | 14 | connection.close() --------------------------------------------------------------------------------