Tutorial Dari Semalt: Menggores Web Dengan Python

Saya telah mengunjungi KinoPoisk (IMDB versi Rusia) baru-baru ini dan menemukan bahwa selama bertahun-tahun saya berhasil memberi peringkat lebih dari 1000 film. Saya pikir akan menarik untuk meneliti data ini lebih detail: apakah selera film saya berubah seiring waktu? Selama musim apa saya dapat menonton lebih banyak film?

Tetapi sebelum kita menganalisis dan membangun grafik yang indah, kita perlu mendapatkan datanya. Sayangnya, banyak layanan tidak memiliki API publik, jadi Anda harus menyingsingkan lengan baju Anda dan mengurai halaman html.

Artikel ini ditujukan bagi mereka yang selalu ingin belajar cara menggunakan Web Scrapping tetapi tidak mendapatkannya atau tidak tahu harus mulai dari mana.

Tugas

Tugas kami adalah untuk mengekstrak data tentang film yang sudah dilihat: judul film, tanggal dan waktu menonton, peringkat pengguna.

Bahkan, pekerjaan kami akan dilakukan dalam 2 tahap:

Tahap 1: unduh dan simpan halaman html

Tahap 2: parse html dalam format yang sesuai untuk analisis lebih lanjut (csv, json, panda dataframe dll.)

Instrumen

Ada banyak pustaka python untuk mengirim permintaan http. Yang paling terkenal dan sangat berguna adalah Permintaan.

Anda juga perlu memilih perpustakaan untuk parsing html.

BeatifulSoup, lxml

Ini adalah dua perpustakaan paling populer untuk parsing html dan memilih salah satunya adalah preferensi pribadi. Selain itu, pustaka-pustaka ini saling terhubung satu sama lain: BeautifulSoup mulai menggunakan lxml sebagai parser internal untuk akselerasi, dan dalam lxml, modul supparser ditambahkan. Untuk membandingkan pendekatan, saya akan mengurai data dengan BeautifulSoup dan menggunakan selektor XPath di modul lxml.html.

Mengunduh Data

Mari mulai mengunduh data. Pertama-tama, mari kita coba untuk mendapatkan halaman dengan url dan menyimpannya ke file lokal.

Kami membuka file yang dihasilkan dan melihat bahwa itu tidak sesederhana itu: situs menganggap kami robot dan tidak akan menampilkan data.

Mari Kita Cari Tahu Bagaimana Situs Ini Bekerja

Browser tidak memiliki masalah dalam mendapatkan informasi dari situs. Mari kita lihat bagaimana tepatnya mengirim permintaan. Untuk melakukan ini, kami menggunakan panel "Jaringan" di "Alat Pengembang" di browser (saya menggunakan Firebug untuk ini), biasanya, permintaan yang kami butuhkan adalah yang terpanjang.

Seperti yang bisa kita lihat, browser juga mengirim ke header UserAgent, cookie, dan sejumlah parameter lainnya. Pertama, kami hanya akan mencoba mengirim UserAgent yang benar ke tajuk.

Kali ini kami berhasil, dan sekarang kami diberikan data yang diperlukan. Perlu dicatat bahwa kadang-kadang situs juga memeriksa validitas cookie, di mana sesi kasus di perpustakaan Permintaan akan membantu.

Unduh Semua Tarif

Sekarang kami dapat menyimpan satu halaman dengan tarif. Tetapi biasanya pengguna memiliki banyak tarif, dan perlu untuk mengulangi semua halaman. Nomor halaman yang menarik minat kami mudah ditransfer langsung ke url.

Mengumpulkan Data Dari Html

Sekarang mari kita langsung mengumpulkan data dari html. Cara termudah untuk memahami bagaimana halaman html terstruktur adalah dengan menggunakan fungsi "Periksa elemen" di browser. Dalam hal ini, semuanya cukup sederhana: seluruh tabel dengan harga ada di tag. Pilih simpul ini:

dari bs4 import BeautifulSoup

dari lxml import html

# Sup Cantik

sup = BeautifulSoup (teks)

film_list = soup.find ('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring (teks)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']') [0]

Mari kita belajar cara mengeluarkan judul film Rusia dan tautan ke halaman film (juga cara mendapatkan teks dan nilai atribut).

Jika Anda perlu mengekstrak judul dalam bahasa Inggris, ubah "nameRus" menjadi "nameEng".

Hasil

Kami belajar cara mem-parsing situs web, berkenalan dengan Permintaan perpustakaan, BeautifulSoup, dan lxml, serta menerima data yang sesuai untuk analisis lebih lanjut film yang sudah dilihat di KinoPoisk.