Pengantar Pengikisan Web Python dan Perpustakaan Sup yang Indah

Pengantar Pengikisan Web Python dan Perpustakaan Sup yang Indah

Objektif

Mempelajari cara mengekstrak informasi dari halaman HTML menggunakan python dan perpustakaan sup yang indah.

Persyaratan

  • Pemahaman tentang dasar -dasar pemrograman Python dan Object Oriented

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
    langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - Diberikan perintah linux untuk dieksekusi sebagai pengguna biasa

Perkenalan

Mengikis web adalah teknik yang terdiri dari ekstraksi data dari situs web melalui penggunaan perangkat lunak khusus. Dalam tutorial ini kita akan melihat cara melakukan pengikisan web dasar menggunakan python dan perpustakaan sup yang indah. Kami akan menggunakan Python3 Menargetkan beranda Rotten Tomatoes, agregator ulasan dan berita terkenal untuk film dan acara TV, sebagai sumber informasi untuk latihan kami.

Pemasangan perpustakaan sup yang indah

Untuk melakukan pengikisan kami, kami akan menggunakan perpustakaan python sup yang indah, oleh karena itu hal pertama yang perlu kami lakukan adalah menginstalnya. Perpustakaan tersedia di repositori dari semua distribusi GNU \ Linux utama, oleh karena itu kami dapat menginstalnya menggunakan Paket Favorit kami, atau dengan menggunakan Pip, cara asli Python untuk memasang paket.

Jika penggunaan manajer paket distribusi lebih disukai dan kami menggunakan fedora:

$ sudo dnf menginstal python3-beautifulsoup4

Di Debian dan turunannya, paket ini disebut Beautifulsoup4:

$ sudo apt-get install beautifulsoup4

Di Archilinux kita dapat menginstalnya melalui Pacman:

$ sudo Pacman -s Python -beatupilusoup4

Jika kami ingin menggunakan Pip, Sebaliknya, kita bisa menjalankan:

$ Pip3 Instal -Pengguna Beautifulsoup4

Dengan menjalankan perintah di atas dengan --pengguna Bendera, kami akan menginstal versi terbaru dari perpustakaan sup yang indah hanya untuk pengguna kami, oleh karena itu tidak ada izin root yang diperlukan. Tentu saja Anda dapat memutuskan untuk menggunakan PIP untuk menginstal paket secara global, tetapi secara pribadi saya cenderung lebih suka instalasi per pengguna saat tidak menggunakan manajer paket distribusi.



Objek yang indah

Mari kita mulai: Hal pertama yang ingin kami lakukan adalah membuat objek yang indah. Konstruktor cantik menerima baik a rangkaian atau pegangan file sebagai argumen pertama. Yang terakhir adalah yang menarik minat kami: kami memiliki URL halaman yang ingin kami gosok, oleh karena itu kami akan menggunakan Urlopen metode Urllib.meminta Perpustakaan (diinstal secara default): Metode ini mengembalikan objek seperti file:

Dari BS4 Impor Beautifulsup dari Urllib.Permintaan impor urlopen dengan urlopen ('http: // www.tomat busuk.com ') sebagai beranda: sup = indahsoup (beranda) 
Menyalin

Pada titik ini, sup kami sudah siap: Sup Objek mewakili dokumen secara keseluruhan. Kami dapat mulai menavigasinya dan mengekstraksi data yang kami inginkan menggunakan metode dan properti bawaan. Misalnya, katakanlah kami ingin mengekstrak semua tautan yang terkandung dalam halaman: kami tahu bahwa tautan diwakili oleh A Tag dalam HTML dan tautan aktual terkandung di href atribut tag, sehingga kami dapat menggunakan Temukan semua Metode objek yang baru saja kita buat untuk menyelesaikan tugas kita:

untuk tautan dalam sup.find_all ('a'): cetak (tautan.get ('href')) 
Menyalin

Dengan menggunakan Temukan semua metode dan menentukan A Sebagai argumen pertama, yang merupakan nama tag, kami mencari semua tautan di halaman. Untuk setiap tautan yang kemudian kami ambil dan mencetak nilai href atribut. Dalam cantiknya atribut suatu elemen disimpan menjadi kamus, oleh karena itu mengambilnya sangat mudah. Dalam hal ini kami menggunakan mendapatkan Metode, tetapi kita bisa mengakses nilai atribut HREF bahkan dengan sintaks berikut: tautan ['href']. Kamus Atribut Lengkap itu sendiri terkandung dalam attrs properti elemen. Kode di atas akan menghasilkan hasil berikut:

[…] Https: // editorial.tomat busuk.com/https: // Editorial.tomat busuk.com/24-frame/https: // editorial.tomat busuk.com/pesta-guide/https: // editorial.tomat busuk.com/box-office-guru/https: // editorial.tomat busuk.com/kritikus-konsensus/https: // editorial.tomat busuk.com/lima-favorit-film/https: // editorial.tomat busuk.com/sekarang streaming/https: // editorial.tomat busuk.com/Parental-Guidance/https: // Editorial.tomat busuk.com/red-carpet-roundup/https: // editorial.tomat busuk.com/rt-on-dvd/https: // editorial.tomat busuk.com/the-simpsons-decade/https: // editorial.tomat busuk.com/sub-cult/https: // editorial.tomat busuk.com/tech-talk/https: // editorial.tomat busuk.com/ total-recall/ […] 

Daftar ini jauh lebih lama: di atas hanyalah ekstrak dari output, tetapi memberi Anda ide. Itu Temukan semua metode mengembalikan semua Menandai objek yang cocok dengan filter yang ditentukan. Dalam kasus kami, kami baru saja menentukan nama tag yang harus dicocokkan, dan tidak ada kriteria lain, jadi semua tautan dikembalikan: kita akan melihat secara langsung bagaimana membatasi pencarian kami lebih lanjut.



Kasus Uji: Mengambil semua judul "Top Box Office"

Mari kita lakukan pengikisan yang lebih terbatas. Katakanlah kami ingin mengambil semua judul film yang muncul di bagian "Top Box Office" dari beranda Rotten Tomatoes. Hal pertama yang ingin kami lakukan adalah menganalisis halaman html untuk bagian itu: melakukannya, kita dapat mengamati bahwa elemen yang kita butuhkan semuanya terkandung di dalam a meja elemen dengan "Kotak Top-Kotak" pengenal:

Top box office

Kami juga dapat mengamati bahwa setiap baris tabel menyimpan informasi tentang film: skor judulnya terkandung sebagai teks di dalam a menjangkau elemen dengan kelas "tmeterscore" di dalam sel pertama baris, sedangkan string yang mewakili judul film terkandung dalam sel kedua, sebagai teks dari A menandai. Akhirnya, sel terakhir berisi tautan dengan teks yang mewakili hasil box office film. Dengan referensi itu, kami dapat dengan mudah mengambil semua data yang kami inginkan:

Dari BS4 Impor Beautifulsup dari Urllib.Minta Impor Urlopen dengan urlopen ('https: // www.tomat busuk.com ') sebagai beranda: sup = indahsoup (beranda.baca (), 'html.Parser ') # Pertama kami menggunakan metode temukan untuk mengambil tabel dengan ID' Top-box-office 'Top_box_office_table = sup.find ('table', 'id': 'Top-box-office') # Daripada kami beralih ke setiap baris dan mengekstrak informasi film untuk baris di top_box_office_table.find_all ('tr'): sel = baris.find_all ('td') title = sel [1].menemukan sebuah').get_text () money = sel [2].menemukan sebuah').get_text () skor = baris.find ('span', 'class': 'tmeterscore').get_text () print ('0 - 1 (tomatometer: 2)'.format (judul, uang, skor)) 
Menyalin

Kode di atas akan menghasilkan hasil berikut:

Orang Asia Kaya Gila - $ 24.9m (Tomatometer: 93%) The Meg - $ 12.9m (Tomatometer: 46%) Pembunuhan Happytime - \ $ 9.6m (tomatometer: 22%) Misi: tidak mungkin - Fallout - $ 8.2m (tomatometer: 97%) mil 22 - $ 6.5m (Tomatometer: 20%) Christopher Robin - $ 6.4m (Tomatometer: 70%) Alpha - $ 6.1m (tomatometer: 83%) Blackkklansman - $ 5.2m (Tomatometer: 95%) Slender Man - $ 2.9m (tomatometer: 7%) a.X.L. -- $ 2.8m (tomatometer: 29%) 


Kami memperkenalkan beberapa elemen baru, mari kita lihat. Hal pertama yang telah kami lakukan, adalah mengambil meja dengan ID 'Top-Box-Office', menggunakan menemukan metode. Metode ini bekerja serupa dengan Temukan semua, Tetapi sementara yang terakhir mengembalikan daftar yang berisi kecocokan yang ditemukan, atau kosong jika tidak ada korespondensi, yang pertama kembali selalu merupakan hasil pertama atau Tidak ada Jika elemen dengan kriteria yang ditentukan tidak ditemukan.

Elemen pertama yang disediakan untuk menemukan Metode adalah nama tag yang harus dipertimbangkan dalam pencarian, dalam hal ini meja. Sebagai argumen kedua kami melewati kamus di mana masing -masing kunci mewakili atribut tag dengan nilai yang sesuai. Pasangan nilai kunci yang disediakan dalam kamus mewakili kriteria yang harus dipenuhi untuk pencarian kami untuk menghasilkan kecocokan. Dalam hal ini kami mencari pengenal Atribut dengan nilai "Top-box-office". Perhatikan itu karena masing -masing pengenal Harus unik di halaman HTML, kita bisa saja menghilangkan nama tag dan menggunakan sintaks alternatif ini:

top_box_office_table = sup.find (id = 'top-box-office') 
Menyalin

Setelah kami mengambil meja kami Menandai objek, kami menggunakan Temukan semua metode untuk menemukan semua baris, dan mengulanginya. Untuk mengambil elemen lain, kami menggunakan prinsip yang sama. Kami juga menggunakan metode baru, get_text: Ini mengembalikan hanya bagian teks yang terkandung dalam tag, atau jika tidak ada yang ditentukan, di seluruh halaman. Misalnya, mengetahui bahwa persentase skor film diwakili oleh teks yang terkandung dalam menjangkau elemen dengan tmeterscore kelas, kami menggunakan get_text metode pada elemen untuk mengambilnya.

Dalam contoh ini kami baru saja menampilkan data yang diambil dengan pemformatan yang sangat sederhana, tetapi dalam skenario dunia nyata, kami mungkin ingin melakukan manipulasi lebih lanjut, atau menyimpannya dalam database.

Kesimpulan

Dalam tutorial ini kami baru saja menggaruk permukaan apa yang bisa kami lakukan menggunakan python dan perpustakaan sup yang indah untuk melakukan pengikisan web. Perpustakaan berisi banyak metode yang dapat Anda gunakan untuk pencarian yang lebih halus atau untuk menavigasi halaman dengan lebih baik: untuk ini saya sangat merekomendasikan untuk berkonsultasi dengan dokumen resmi yang ditulis dengan sangat baik.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Menguasai loop skrip bash
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • Perintah Linux Dasar
  • Cara Membangun Aplikasi Tkinter Menggunakan Objek Berorientasi…
  • Ubuntu 20.04 WordPress dengan Instalasi Apache
  • Cara memasang gambar iso di linux