mengikis web: Mengekstrak data dengan cekap dari laman web
Tutorial ini menerangkan bagaimana kandungan laman web diberikan dan bagaimana untuk mengikisnya menggunakan python, permintaan, sup cantik, dan selenium. Kami akan memberi tumpuan kepada mengikis kandungan dinamik, khususnya komen.
bilakah pengikis web diperlukan?
Web mengikis secara automatik mengambil, parses, dan mengekstrak maklumat dari laman web -selalunya yang direka untuk interaksi manusia. Ini adalah usaha terakhir ketika API tidak tersedia. Pertimbangkan kelemahan ini:
Memahami laman web moden
Mari kita periksa struktur aplikasi web biasa. Kami akan menggunakan artikel "Pengenalan kepada Vagrant" sebagai contoh. Untuk mengikis kandungan, kita mesti terlebih dahulu mencari elemen HTML yang berkaitan.
Pelayar membenarkan melihat sumber HTML. Sumber "Pengenalan kepada Vagrant" mendedahkan sebahagian besar JavaScript yang tidak berkaitan dengan kandungan artikel itu sendiri. Petikan kecil ditunjukkan di bawah:
statik vs pengikis dinamik
Statik Pengikis
Mengabaikan JavaScript, mengambil HTML sisi pelayan mentah. Ini berfungsi jika kandungan sasaran langsung di sumber. Walau bagaimanapun, untuk kandungan yang dihasilkan oleh JavaScript (Kandungan Dinamik), kaedah ini gagal. Pengikis dinamik menggunakan alat seperti selenium untuk berinteraksi dengan halaman sebagai penyemak imbas akan, menjadikan JavaScript dan membuat kandungan dinamik tersedia. mengikis komen dinamik dengan selenium
mari mengikis komen dari laman web (contoh: komen Codecanyon). Kami akan menggunakan Selenium untuk menavigasi ke URL Komen:
Mencari elemen komen memerlukan memeriksa halaman (klik kanan, "periksa"). Selenium's
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://codecanyon.net/item/whatshelp-whatsapp-help-and-support-plugin-for-javascript/42202303/comments')
WebDriverWait
from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() url = 'http://www.c2.com/loading-page' driver.get(url) element = WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.ID, "loaded_element")) )
Pengikis web adalah berharga apabila data yang diperlukan tidak tersedia melalui API. Walaupun mencabar dengan aplikasi web moden, alat seperti permintaan, sup yang indah, dan selenium memudahkan proses.
Tutorial ini menggabungkan sumbangan dari Esther Vaati, pemaju perisian dan penulis untuk Envato Tuts.
Atas ialah kandungan terperinci Mengikis web moden dengan sup dan selenium yang indah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!