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

Membangun Scraper Web Pertama Anda, Bagian 2

by
Length:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Dalam tutorial ini, Anda akan belajar bagaimana Anda bisa menggunakan Mechanize untuk mengklik tautan, mengisi formulir, dan mengunggah file. Anda juga akan belajar bagaimana Anda bisa mengiris halaman objek Mechanize dan bagaimana cara mengotomatisasi pencarian Google dan menyimpan hasilnya.

Topik-topik

  • Halaman Tunggal vs. Paginasi
  • Mechanize
  • Agen
  • Halaman
  • Metode Nokogiri
  • Tautan-tautan
  • Klik
  • Formulir

Halaman Tunggal vs. Paginasi

Sejauh ini kita telah menghabiskan beberapa waktu mencari tahu bagaimana kita bisa meng-scrape layar satu halaman menggunakan Nokogiri. Ini adalah dasar yang baik untuk melangkah maju dan belajar mengekstrak konten dari banyak halaman.

Bagaimanapun, masalah yang ingin kita selesaikan melibatkan mendapatkan konten dari lebih dari 140 episode—yang lebih banyak konten daripada yang cukup sesuai dengan satu halaman web. Kita harus bekerja dengan paginasi dan perlu mencari cara untuk mengikuti konten di lubang kelincinya.

Di sinilah Nokogiri berhenti dan gem berguna lainnya yang disebut Mechanize ikut bermain.

Mechanize

Mechanize adalah alat lain yang hebat yang memiliki banyak barang untuk ditawarkan. Ini pada dasarnya memungkinkan Anda untuk mengotomatisasi interaksi dengan situs web yang Anda butuhkan untuk mengekstrak kontennya. Dalam hal ini, saya mengingatkan beberapa fungsi yang mungkin Anda ketahui dari pengujian dengan Capybara.

Jangan salah sangka, bermain dengan Nokogiri di satu halaman sangat mengagumkan, tapi untuk pekerjaan ekstraksi data yang lebih pedas, kita memerlukan sedikit tenaga kuda lagi. Pada intinya kita dapat merayap melalui halaman sebanyak yang kita butuhkan dan berinteraksi dengan elemen mereka—meniru dan mengotomatisasi perilaku manusia. Barang yang cukup bagus!

Permata ini memungkinkan Anda mengikuti tautan, mengisi field-field formulir, dan mengirimkan data tersebut—bahkan menangani cookie sudah dipersiapkan. Itu berarti Anda juga dapat meniru login pengguna ke sesi pribadi dan mendapatkan konten dari situs yang hanya Anda yang memiliki aksesnya.

Anda mengisi login dengan kredensial Anda dan memberitahu Mechanize bagaimana cara mengikuti. Karena Anda bisa mengklik tautan dan mengirimkan formulir, sangat sedikit yang tidak dapat Anda lakukan dengan alat ini. Ini memiliki hubungan dekat dengan Nokogiri dan juga bergantung padanya. Aaron Patterson kembali menjadi salah satu pencipta gem yang indah ini.

Instansiasi Agen Mechanize

Sebelum kita bisa mulai melakukan mekanisasi, kita perlu memberi instansiasi agen Mechanize.

some_scraper.rb

Agent ini akan digunakan untuk mengambil halaman, mirip dengan apa yang kita lakukan dengan Nokogiri.

some_scraper.rb

Yang terjadi di sini adalah agen Mechanize mendapatkan halaman podcast dan cookies-nya.

Mengekstrak Konten Halaman

Kita sekarang memiliki halaman yang siap untuk diekstraksi. Sebelum kita melakukannya, saya menyarankan agar kita melihat apa yang terjadi dengan menggunakan metode inspect.

some_scraper.rb

Hasilnya cukup substantif. Lihat dan perhatikan apa arti objek Mechanize::Page. Di sini Anda bisa melihat semua atribut untuk halaman itu.

Bagi saya, ini adalah objek yang sangat berguna untuk mengiris data yang ingin Anda ekstrak.

Keluaran

Jika Anda ingin melihat halaman HTML itu sendiri, Anda dapat memberi tag pada metode body atau content.

some_scraper.rb

Keluaran

Karena podcast ini hanya memiliki sejumlah kecil elemen yang berbeda pada halaman, inilah Mechanize::Page yang akan dikembalikan dari github.com. Ini memiliki variasi konten yang lebih besar untuk dilihat. Saya pikir ini penting untuk Anda rasakan.

Keluaran github.com

Kembali ke podcast, Anda juga dapat melihat hal-hal seperti pengkodean, kode tanggapan HTTP, URI, atau header tanggapan.

some_scraper.rb

Keluaran

Ada banyak hal lagi jika Anda ingin menggali lebih dalam. Akan saya tinggalkan seperti itu.

Metode Nokogiri

  • at
  • search

Mechanize menggunakan Nokogiri untuk meng-scrape data dari halaman. Anda bisa menerapkan apa yang Anda pelajari tentang Nokogiri di artikel pertama dan menggunakannya di halaman Mechanize juga. Itu berarti Anda umumnya menggunakan Mechanize untuk menavigasi halaman dan metode Nokogiri untuk kebutuhan scrape Anda.

Misalnya, jika Anda ingin mencari satu objek, Anda bisa menggunakan at, sementara search mengembalikan semua objek yang sesuai dengan pemilih pada halaman tertentu. Untuk mengulanginya, metode-metode ini akan bekerja baik pada dokumen Nokogiri dan objek halaman Mechanize.

some_scraper.rb

Keluaran

Tautan-tautan

  • links
  • link_with
  • links_with

Kita juga bisa menavigasi seluruh situs sesuai dengan keinginan kita. Mungkin bagian terpenting dari Mechanize adalah kemampuannya untuk membiarkan Anda bermain dengan tautan. Jika tidak, Anda bisa tetap bertahan dengan Nokogiri itu sendiri. Mari kita lihat apa yang kita dapatkan kembali jika kita meminta halaman untuk tautannya.

some_scraper.rb

Keluaran

Holy moly, mari kita rinci ini. Karena kita belum memberi tahu Mechanize untuk mencari tempat lain, kita mendapat banyak tautan dari hanya halaman pertama tersebut. Mechanize pergi melewati halaman itu dalam urutan menurun dan mengembalikan daftar tautan ini dari atas ke bawah. Saya telah membuat gambar kecil dengan pointer hijau ke berbagai tautan yang dapat Anda lihat di keluaran.

Omong-omong, ini sudah menunjukkan hasil akhir dari desain ulang untuk podcast saya. Saya pikir versi ini sedikit lebih baik untuk tujuan demonstrasi. Anda juga bisa melihat sekilas bagaimana hasil akhirnya terlihat dan mengapa saya perlu meng-scrape situs Sinatra lama saya.

Tangkapan Layar

Podcast Links

Seperti biasa, kita juga bisa mengekstrak teks saja darinya.

some_scraper.rb

Keluaran

Mendapatkan semua tautan ini dalam jumlah besar bisa sangat berguna atau hanya membosankan. Beruntung bagi kita, kita memiliki beberapa alat untuk menyesuaikan apa yang kita butuhkan.

some_scraper.rb

Keluaran

Boom! Sekarang kita mempunyai tujuan! Kita bisa memperbesar tautan tertentu seperti itu. Kita dapat menargetkan tautan yang sesuai dengan kriteria tertentu—seperti teksnya, misalnya—dengan API yang lebih bagus seperti links_with atau link_with. Selain itu, jika ada beberapa tautan Focus, kita dapat memperbesar sejumlah tertentu di halaman yang menggunakan tanda kurung [].

some_scraper.rb

Jika Anda tidak mencari teks tautan tapi tautan itu sendiri, Anda hanya perlu menentukan href tertentu untuk menemukan tautannya. Mechanize tidak akan menghalangi Anda. Alih-alih text, Anda memberi feed metodenya dengan href.

some_scraper.rb

Jika Anda hanya ingin mencari tautan pertama dengan teks yang diinginkan, Anda juga bisa menggunakan sintaks ini. Sangat mudah dan sedikit lebih mudah dibaca.

some_scraper.rb

Bagaimana dengan mengikuti teman tersebut dan melihat apa yang tersembunyi di balik tautan Focus ini? Mari kita klik!

Klik

some_scraper.rb

Ini akan membuat daftar panjang lainnya seperti sebelumnya. Lihat betapa mudahnya menggabungkan .click.links. Mechanize mengklik tautan untuk Anda dan mengikuti halaman ke tujuan yang baru. Karena kita juga meminta daftar tautan, kita akan mendapatkan semua tautan yang dapat ditemukan Mechanize di halaman baru tersebut.

Katakanlah saya memiliki dua tautan teks dari yang diwawancarai yang sama—yang mentautkan ke tag dan satu dengan episode terakhir—dan saya ingin mendapatkan tautan dari masing-masing halaman ini.

some_scraper.rb

Ini akan memberi Anda daftar tautan untuk kedua halaman. Anda mengulangi setiap tautan untuk yang diwawancarai, dan Mechanize mengikuti tautan yang diklik dan mengumpulkan tautan yang ditemukannya di halaman baru untuk Anda. Di bawah ini Anda dapat menemukan beberapa contoh di mana Anda dapat membandingkan kombinasi untuk Anda memulai.

some_scraper.rb

Formulir

  • submit
  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

Mari kita lihat formulirnya!

some_scraper.rb

Keluaran

Karena kita menggunakan metode forms, kita mendapatkan sebuah array yang dikembalikan—bahkan ketika kita hanya memiliki satu formulir yang dikembalikan kepada kita. Sekarang kita tahu bahwa formulirnya memiliki nama "f", kita bisa menggunakan form versi tunggal untuk mengasahnya.

some_scraper.rb

Dengan menggunakan form('f'), kita memilih formulir khusus yang ingin kita bekerja dengannya. Akibatnya, kita tidak akan mendapatkan array yang dikembalikan.

Keluaran

Kita juga bisa mengidentifikasi nama field masukan teks (q).

Kita bisa mentargetnya dengan nama itu dan tetapkan nilainya seperti atribut Ruby. Yang perlu kita lakukan adalah memberikannya dengan nilai baru. Anda dapat melihat dari contoh keluaran di atas yang kosong secara default.

some_scraper.rb

Keluaran

Seperti yang dapat Anda amati di atas, nilai field teks telah berubah ke New Google Search. Sekarang kita hanya perlu submit formulir dan mengumpulkan hasilnya dari halaman yang dikembalikan Google. Tidak bisa yang lebih mudah. Mari kita cari yang lain kali ini!

some_scraper.rb

Di sini saya mengidentifikasi header hasil pencarian menggunakan penyeleksi CSS h3.r, memetakan text-nya, dan mencetak hasilnya dengan cantik. Tidak sesulit itu, bukan? Itu adalah contoh yang mudah, tentu, tapi pikirkan kemungkinan tak terbatas yang Anda miliki dengan ini!

Keluaran

Mechanize memiliki bidang masukan yang berbeda yang tersedia untuk Anda mainkan. Anda bahkan bisa mengunggah file!

  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

Anda juga bisa mengenali tombol radio dan kotak centang dengan nama mereka dan mencentangnya—Anda bisa menebaknya—check.

some_scraper.rb

Tag option menawarkan pengguna untuk memilih satu item dari daftar drop-down. Sekali lagi, kita targetkan mereka dengan nama dan memilih nomor pilihan yang kita inginkan.

some_scraper.rb

Pengunggahan file bekerja sama dengan memasukkan teks ke dalam formulir dengan menyetelnya seperti atribut-atribut Ruby. Anda mengidentifikasi kolom unggahan dan kemudian menentukan path file (nama file) yang ingin Anda transfer. Kedengarannya lebih rumit dari itu. Mari kita lihat!

some_scraper.rb

Pemikiran Akhir

Lihat, tidak ada keajaiban! Anda sekarang dilengkapi dengan baik untuk bersenang-senang sendiri. Tentu ada sedikit lebih banyak untuk belajar tentang Nokogiri dan Mechanize, tapi bukannya menghabiskan terlalu banyak waktu untuk aspek yang tidak perlu, bermain-main dengannya dan melihat beberapa dokumentasi lagi saat Anda mengalami masalah di luar lingkup artikel pemula.

Saya harap Anda bisa melihat betapa indahnya gem ini dan berapa banyak kekuatan yang ditawarkannya. Seperti yang kita semua tahu dari budaya populer sekarang, ini juga memikul tanggung jawab. Gunakan di dalam kerangka hukum dan bila Anda tidak memiliki akses ke API. Anda mungkin tidak akan sering menggunakan alat ini, tapi sungguh mereka berguna saat Anda memiliki beberapa kebutuhan scraping nyata di depan Anda.

Seperti yang dijanjikan, pada artikel selanjutnya kita akan membahas contoh dunia nyata dimana saya akan meng-scrape data dari situs podcast saya. Saya akan mengekstraknya dari situs Sinatra yang lama dan memindahkannya ke situs Middleman baru saya yang menggunakan file .markdown untuk setiap episode. Kita akan mengekstrak tanggal, nomor episode, nama yang diwawancarai, header, subheader, dan sebagainya. Sampai jumpa!

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.