Artikel ini ditujukan untuk pemula seperti saya.
Mulailah
Pertama, mari kita lihat masalahnya. Saya mengambil situs berita yang kurang terkenal tentang Israel, karena saya sendiri tinggal di negara ini, dan saya ingin membaca berita tanpa iklan dan bukan berita menarik. Jadi, ada situs tempat berita dipasang: ada berita yang diberi tanda merah, dan ada yang biasa. Yang biasa-biasa saja tidak ada yang menarik, dan yang ditandai dengan warna merah adalah sari buahnya. Pertimbangkan situs kami.
Seperti yang Anda lihat, situsnya cukup besar dan ada banyak informasi yang tidak perlu, tetapi kami hanya perlu menggunakan wadah berita. Mari gunakan situs versi seluler
untuk menghemat waktu dan tenaga.
Seperti yang Anda lihat, server memberi kami wadah berita yang indah (yang, omong-omong, lebih dari sekadar situs utama, yang menguntungkan kami) tanpa iklan dan sampah.
Mari kita lihat kode sumber untuk memahami apa yang kita hadapi.
Seperti yang Anda lihat, setiap berita terletak secara terpisah di tag 'a' dan memiliki kelas 'lenta'. Jika kita membuka tag 'a', kita akan melihat bahwa di dalamnya terdapat tag 'span', yang berisi kelas 'time2' atau 'time2 time3', serta waktu publikasi, dan setelah menutup tag, kita melihat teks berita itu sendiri.
Apa yang membedakan berita penting dari berita tidak penting? Kelas yang sama 'time2' atau 'time2 time3'. Berita bertanda 'time2 time3' adalah berita merah kami. Karena inti dari tugasnya jelas, mari kita lanjutkan ke latihan.
Praktek
Untuk bekerja dengan parser, orang pintar datang dengan pustaka "BeautifulSoup4", yang memiliki lebih banyak fungsi keren dan berguna, tetapi lebih banyak lagi di lain waktu. Kami juga membutuhkan pustaka Permintaan yang memungkinkan kami mengirim berbagai permintaan http. Kami pergi untuk mengunduhnya.
(pastikan Anda memiliki versi pip terbaru)
pip install beautifulsoup4
pip install requests
Buka editor kode dan impor perpustakaan kami:
from bs4 import BeautifulSoup
import requests
Pertama, mari simpan URL kita ke variabel:
url = 'http://mignews.com/mobile'
Sekarang mari kita mengirim permintaan GET () ke situs dan menyimpan data yang diterima ke variabel 'halaman':
page = requests.get(url)
Mari kita periksa koneksinya:
print(page.status_code)
Kode tersebut mengembalikan kepada kami kode status '200', yang berarti kami berhasil terhubung dan semuanya beres.
Sekarang mari buat dua daftar (saya akan menjelaskan untuk apa nanti):
new_news = [] news = []
Saatnya menggunakan BeautifulSoup4 dan memberinya makan halaman kami, menunjukkan dalam tanda kutip bagaimana itu akan membantu kami 'html.parcer':
soup = BeautifulSoup(page.text, "html.parser")
Jika Anda memintanya untuk menunjukkan apa yang dia simpan di sana:
print(soup)
Kami akan mengeluarkan semua kode-html dari halaman kami.
Sekarang mari gunakan fungsi pencarian di BeautifulSoup4:
news = soup.findAll('a', class_='lenta')
Mari kita lihat lebih dekat apa yang telah kami tulis di sini.
Dalam daftar 'berita' yang dibuat sebelumnya (yang saya janjikan untuk kembali), simpan semuanya dengan tag 'a' dan kelas 'berita'. Jika kita meminta untuk mengeluarkan ke konsol semua yang ditemukan, itu akan menunjukkan kepada kita semua berita yang ada di halaman:
Seperti yang Anda lihat, bersama dengan teks berita, tag 'a', 'span', kelas ' lenta 'dan' time2 ', dan juga' time2 time3 ', pada umumnya segala sesuatu yang dia temukan sesuai dengan keinginan kita.
Ayo lanjutkan:
for i in range(len(news)):
if news[i].find('span', class_='time2 time3') is not None:
new_news.append(news[i].text)
Di sini, dalam putaran for, kami mengulang seluruh daftar berita kami. Jika pada berita di bawah index [i] kita menemukan tag 'span' dan class 'time2 time3', maka teks dari news ini kita simpan ke list baru 'new_news'.
Perhatikan bahwa kami menggunakan '.text' untuk memformat ulang baris dalam daftar kami dari 'bs4.element.ResultSet' yang digunakan BeautifulSoup untuk pencariannya ke teks biasa.
Setelah saya terjebak dalam masalah ini untuk waktu yang lama karena kesalahpahaman tentang cara kerja format data dan tidak tahu cara menggunakan debug, berhati-hatilah. Jadi, sekarang kita dapat menyimpan data ini ke dalam daftar baru dan menggunakan semua metode dari daftar, karena sekarang ini adalah teks biasa dan, secara umum, lakukan dengan itu apa yang kita inginkan.
Mari kita tampilkan data kita:
for i in range(len(new_news)):
print(new_news[i])
Inilah yang kami dapatkan:
Kami mendapatkan waktu posting dan hanya berita menarik.
Kemudian Anda dapat membuat bot di Keranjang dan mengunggah berita ini di sana, atau membuat widget di desktop Anda dengan berita terkini. Secara umum, Anda dapat menemukan cara mudah untuk mempelajari berita.
Semoga artikel ini akan membantu para pemula memahami apa yang bisa dilakukan dengan parser dan membantu mereka maju sedikit dengan pembelajaran mereka.
Terima kasih atas perhatiannya, saya senang berbagi pengalaman saya.