Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Modern Web Scraping dengan BeautifulSoup dan Selenium

by
Difficulty:IntermediateLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Nafis Iman (you can also view the original English article)

Ikhtisar

HTML hampir intuitif. CSS adalah kemajuan besar yang bersih memisahkan struktur halaman dari dengan tampilan dan nuansa. JavaScript menambah sekedarnya beberapa. Itu adalah teori. Dunia nyata sedikit berbeda.

Dalam tutorial ini, Anda akan belajar bagaimana materi yang Anda lihat dalam browser sebenarnya akan diberikan dan bagaimana untuk pergi tentang gesekan ketika diperlukan. Khususnya, Anda akan belajar bagaimana cara menghitung Disqus komentar. Alat kami akan Python dan mengagumkan paket seperti permintaan, BeautifulSoup, dan Selenium.

Kapan Anda menggunakan Web Scraping?

Web Scraping adalah praktek secara otomatis mengambil isi dari halaman web yang dirancang untuk interaksi dengan pengguna manusia, parsing mereka, dan mengeluarkan beberapa informasi (mungkin navigasi link ke halaman lain). Hal ini kadang-kadang diperlukan jika tidak ada cara lain untuk mengekstrak informasi yang diperlukan. Idealnya, aplikasi ini menyediakan sebuah API yang didedikasikan untuk mengakses data pemrograman. Ada beberapa alasan web scraping harus resor terakhir Anda:

  • Hal ini rapuh (halaman web yang sedang Anda scraping mungkin mengubah sering).
  • Ia mungkin dilarang (beberapa web apps memiliki kebijakan terhadap gesekan).
  • Mungkin lambat dan luas (jika Anda perlu untuk mengambil dan menyeberang melalui banyak suara).

Memahami halaman Web dunia nyata

Mari kita memahami apa yang kita adalah melawan, dengan melihat output dari beberapa kode aplikasi web yang umum. Dalam artikel pengantar gelandangan, ada beberapa Disqus komentar di bagian bawah halaman:

Understanding Real-World Web Pages

Untuk mengikis komentar ini, kita perlu menemukan mereka pada halaman pertama.

Lihat sumber halaman

Setiap browser sejak waktu fajar (1990-an) telah mendukung kemampuan untuk melihat HTML halaman aktif. Berikut adalah potongan dari view source pengenalan gelandangan yang dimulai dengan sepotong besar JavaScript minified dan uglified yang berkaitan dengan artikel itu sendiri. Berikut adalah sebagian kecil dari itu:

Page Source

Berikut adalah beberapa HTML yang sebenarnya dari halaman:

HTML From the Page

Ini terlihat cukup berantakan, tapi apa yang mengejutkan adalah bahwa Anda tidak akan menemukan Disqus komentar dalam sumber halaman.

Frame Inline Perkasa

Ternyata bahwa halaman mashup, dan Disqus komentar tertanam sebagai elemen (inline frame) iframe. Anda dapat mengetahui ini dengan mengklik kanan pada area komentar, dan Anda akan melihat bahwa ada kerangka informasi dan sumber tidak:

The Mighty Inline Frame

Itu masuk akal. Melekatkan konten pihak ketiga sebagai sebuah iframe adalah salah satu alasan utama untuk menggunakan iframes. Mari kita menemukan <iframe>tag kemudian dalam sumber halaman utama. Digagalkan lagi! Ada tidak ada <iframe>tag di halaman utama sumber.

JavaScript yang dihasilkan Markup

Alasan untuk kelalaian ini adalah bahwa Lihat sumber halaman menampilkan konten yang diambil dari server. Tapi akhir DOM (dokumen object model) yang akan diberikan oleh browser mungkin sangat berbeda. JavaScript tendangan dan dapat memanipulasi DOM di akan. Iframe tidak dapat ditemukan, karena itu tidak ada di sana ketika halaman yang Diperoleh dari server.

Statis Scraping vs Scraping dinamis

Scraping statis mengabaikan JavaScript. Itu mengambil halaman web dari server tanpa bantuan browser. Anda mendapatkan apa yang Anda lihat di "Lihat sumber halaman", dan kemudian Anda mengiris dan dadu itu. Jika Anda sedang mencari konten tersedia, Anda perlu tidak maju lebih jauh. Namun, jika konten adalah sesuatu seperti Disqus komentar iframe, Anda perlu scraping dinamis.

Scraping dinamis menggunakan browser yang sebenarnya (atau browser tanpa kepala) dan memungkinkan JavaScript melakukan nya hal. Kemudian, itu query DOM untuk mengekstrak konten mencari. Kadang-kadang Anda perlu untuk mengotomatisasi browser dengan mensimulasikan pengguna untuk mendapatkan konten yang Anda butuhkan.

Statis gesekan dengan permintaan dan BeautifulSoup

Mari kita lihat bagaimana statis karya mengerik menggunakan dua mengagumkan Python paket: permintaan untuk mengambil halaman web dan BeautifulSoup untuk parsing halaman HTML.

Menginstal permintaan dan BeautifulSoup

Install pipenv terlebih dahulu, dan kemudian: pipenv menginstal permintaan beautifulsoup4

Ini akan menciptakan lingkungan virtual untuk Anda juga. Jika Anda menggunakan kode dari gitlab, Anda dapat pipenv install.

Mengambil halaman

Mengambil halaman dengan permintaan adalah sebuah satu kapal: r = requests.get(url)

Objek respon memiliki banyak atribut. Yang paling penting ok dan content. Jika permintaan gagal maka r.ok akan palsu dan r.content akan berisi kesalahan. Konten adalah aliran byte. Hal ini biasanya lebih baik untuk memecahkan kode ke utf-8 ketika berhadapan dengan teks:

Jika semuanya OK lalu r.content akan berisi halaman web yang diminta (sama seperti Lihat sumber halaman).

Menemukan unsur dengan BeautifulSoup

Fungsi get_page() di bawah ini mengambil halaman web dengan URL, decode ke UTF-8, dan mem-parsing itu ke sebuah objek BeautifulSoup yang menggunakan HTML parser.

Setelah kita memiliki sebuah objek BeautifulSoup, kita dapat mulai mengekstrak informasi dari halaman. BeautifulSoup menyediakan banyak menemukan fungsi menemukan unsur-unsur di dalam halaman dan menelusuri dalam elemen bersarang.

Tuts + Halaman pengarang yang berisi beberapa tutorial. Berikut adalah halaman penulis saya. Pada setiap halaman, ada tutorial sampai 12. Jika Anda memiliki lebih dari 12 tutorial maka Anda dapat menavigasi ke halaman berikutnya. HTML untuk setiap artikel tertutup dalam <article>tag. Fungsi berikut menemukan semua elemen artikel pada halaman, latihan ke link mereka, dan ekstrak href atribut untuk mendapatkan URL tutorial:</article>

Kode berikut akan semua artikel dari halaman dan cetakan mereka (tanpa awalan umum):

Dinamis Scraping dengan Selenium

Scraping statis adalah cukup baik untuk mendapatkan daftar artikel, tapi seperti yang kita lihat sebelumnya, Disqus komentar tertanam sebagai elemen iframe oleh JavaScript. Untuk panen komentar, kita akan perlu untuk mengotomatisasi browser dan berinteraksi dengan DOM secara interaktif. Salah satu alat terbaik untuk pekerjaan adalah Selenium.

Selenium terutama diarahkan otomatis pengujian aplikasi web, tapi bagus sebagai alat Otomasi peramban untuk keperluan umum.

Menginstal Selenium

Ketik perintah ini untuk menginstal Selenium: pipenv install selenium

Memilih Driver Web Anda

Selenium kebutuhan sopir web (browser mengotomatisasi). Untuk web gesekan, itu biasanya tidak masalah driver yang Anda pilih. Saya lebih suka pengandar Chrome. Ikuti petunjuk dalam panduan Selenium.

Chrome vs PhantomJS

Dalam beberapa kasus Anda mungkin lebih memilih untuk menggunakan browser tanpa kepala, yang berarti tidak ada UI dipajangkan. Secara teoritis, PhantomJS adalah hanya salah satu web driver. Namun, dalam prakteknya, orang melaporkan masalah mana Selenium bekerja dengan baik dengan Chrome atau Firefox dan kadang-kadang gagal dengan PhantomJS. Saya lebih suka untuk menghilangkan variabel ini dari persamaan dan menggunakan driver web browser yang sebenarnya.

Menghitung Disqus komentar

Mari kita lakukan beberapa gesekan dinamis dan menggunakan Selenium untuk menghitung Disqus komentar pada Tuts + tutorial. Berikut adalah impor diperlukan.

Fungsi get_comment_count() menerima Selenium driver dan URL. Menggunakan yang get() metode driver untuk mengambil URL. Hal ini mirip dengan requests.get(), tetapi perbedaan adalah objek sopir berhasil representasi hidup DOM.

Kemudian, ia mendapat gelar tutorial dan menempatkan Disqus iframe menggunakan id orang tua yang disqus_thread dan kemudian iframe itu sendiri:

Langkah berikutnya adalah untuk mengambil isi dari iframe itu sendiri. Perhatikan bahwa kita menunggu untuk elemen comment-count yang akan hadir karena komentar yang dimuat secara dinamis dan tidak selalu tersedia belum.

Bagian terakhir adalah untuk kembali komentar terakhir jika itu tidak dibuat oleh saya. Idenya adalah untuk mendeteksi komentar saya tidak menanggapi belum.

Kesimpulan

Web scarpping adalah praktek yang berguna ketika informasi yang Anda butuhkan dapat diakses melalui aplikasi web yang tidak memberikan sebuah API yang sesuai. Dibutuhkan beberapa pekerjaan non-sepele untuk mengekstrak data dari aplikasi modern web, tapi alat-alat yang matang dan dirancang dengan baik seperti permintaan, BeautifulSoup, dan Selenium membuatnya berharga.

Selain itu, jangan ragu untuk melihat apa yang kita telah tersedia untuk dijual dan untuk studi di pasar Envato, dan jangan ragu untuk mengajukan pertanyaan dan memberikan umpan balik Anda berharga menggunakan feed di bawah ini.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.