$lang['tuto'] = "tutorial"; ?> Belajar Menggunakan Python dan Sup Cantik untuk Mengikis Web

Belajar Menggunakan Python dan Sup Cantik untuk Mengikis Web pada Laman Web Dinamik

Belajar Menggunakan Python dan Sup Cantik untuk Mengikis Web pada Laman Web Dinamik
Web scraping

Mengatasi Cabaran Mengikis Web di Tapak E-Dagang

Mengikis web boleh menjadi menarik dan menakutkan, terutamanya apabila anda baru dalam proses tersebut. Saya masih ingat percubaan pertama saya mengikis tapak web dinamik—rasanya seperti cuba membaca buku melalui kaca beku. Dengan platform seperti Beautiful Soup, kemungkinannya tidak berkesudahan, tetapi cabaran seperti menavigasi struktur HTML yang kompleks boleh menguji kesabaran anda. 🧑‍💻

Dalam senario ini, anda sedang berusaha untuk mengekstrak data daripada tapak web e-dagang, tetapi elemen HTML kelihatan sukar difahami. Banyak tapak web, seperti yang anda berurusan, menggunakan struktur bersarang atau kandungan dinamik yang menyukarkan mencari elemen tertentu. Ini boleh berasa mengecewakan, terutamanya apabila anda baru bermula dengan alatan seperti Python dan Beautiful Soup.

Tetapi jangan risau; setiap pengikis web yang berjaya pernah bergelut dengan halangan yang sama ini. Belajar menganalisis struktur HTML, mengenal pasti corak dan memperhalusi pemilih anda adalah satu upacara dalam dunia mengikis. Dengan kegigihan dan beberapa teknik yang telah dicuba dan benar, anda tidak lama lagi akan menguasai seni menavigasi walaupun HTML yang paling berbelit-belit.

Dalam artikel ini, kami akan meneroka strategi praktikal untuk menavigasi HTML dengan cekap dan mengekstrak elemen tepat yang anda perlukan. Daripada memahami teg hingga bekerja dengan alat pembangun, cerapan ini akan menyediakan anda untuk berjaya. Mari selami! 🌟

Perintah Contoh Penggunaan
find_all Digunakan untuk mendapatkan semula semua contoh teg HTML atau kelas tertentu dalam dokumen HTML. Contohnya, soup.find_all("div", class_="productContainer") mendapatkan semula semua bekas produk pada halaman.
requests.get Membuat permintaan HTTP GET untuk mengambil kandungan HTML mentah bagi URL yang diberikan. Contoh: respons = requests.get(url) mendapatkan semula HTML halaman untuk dihuraikan.
BeautifulSoup Memulakan penghurai HTML. Contoh: sup = BeautifulSoup(response.content, "html.parser") menyediakan kandungan HTML untuk pemprosesan selanjutnya.
find_element Digunakan dengan Selenium untuk mencari satu elemen pada halaman. Contoh: product.find_element(Oleh.CLASS_NAME, "nama") mendapatkan semula nama produk.
find_elements Sama seperti find_element tetapi mendapatkan semula semua elemen padanan. Contoh: driver.find_elements(Oleh.CLASS_NAME, "productContainer") mengambil semua bekas produk untuk lelaran.
By.CLASS_NAME Strategi pencari Selenium untuk mengenal pasti unsur mengikut nama kelasnya. Contoh: Oleh.CLASS_NAME, "harga" mencari elemen dengan kelas yang ditentukan.
assertGreater Digunakan dalam ujian unit untuk mengesahkan nilai lebih besar daripada yang lain. Contoh: self.assertGreater(len(product_boxes), 0) memastikan produk ditemui semasa mengikis.
ChromeDriverManager Mengurus muat turun dan persediaan Chrome WebDriver untuk Selenium secara automatik. Contoh: pemandu = webdriver.Chrome(service=Service(ChromeDriverManager().install())).
text Mendapatkan semula kandungan teks elemen HTML. Contoh: title = product.find("div", class_="name").text mengekstrak teks yang boleh dilihat untuk nama produk.
unittest.TestCase Kelas daripada modul ujian unit Python yang digunakan untuk menentukan kes ujian. Contoh: kelas TestWebScraper(unittest.TestCase) mencipta set ujian untuk pengikis.

Memecahkan Penyelesaian Mengikis Web

Skrip pertama memanfaatkan , perpustakaan Python yang popular untuk penghuraian HTML, untuk mengekstrak data daripada tapak e-dagang yang disediakan. Ia berfungsi dengan mengambil HTML mentah menggunakan perpustakaan dan kemudian menghuraikannya dengan Beautiful Soup's . Setelah HTML dihuraikan, skrip mengenal pasti elemen tertentu menggunakan tag dan nama kelas, seperti bekas produk, yang diandaikan membungkus butiran produk. Pendekatan ini cekap untuk HTML statik tetapi boleh bergelut jika tapak web menggunakan kandungan dinamik yang diberikan oleh JavaScript. Saya masih ingat bergelut dengan isu yang sama pada tapak web resipi dinamik—semuanya kelihatan betul, namun tiada data muncul! 🧑‍💻

Dalam skrip kedua, mula bermain. Alat ini amat berguna untuk tapak dengan kandungan yang dimuatkan melalui JavaScript. Dengan melancarkan sesi pelayar sebenar, Selenium mensimulasikan pengguna yang berinteraksi dengan tapak. Ini membolehkannya menunggu sehingga semua elemen dimuatkan dan kemudian mengekstrak data yang diperlukan. Sebagai contoh, ia mencari butiran produk menggunakan pengesan berasaskan kelas seperti . Walaupun Selenium menyediakan keupayaan berkuasa, ia memerlukan pengurusan sumber yang teliti—seperti mengingati untuk berhenti daripada sesi penyemak imbas—atau ia mungkin menggunakan memori yang berlebihan, seperti yang saya pelajari semasa sesi penyahpepijatan lewat malam apabila komputer riba saya membeku! 🖥️

Satu lagi ciri utama skrip ini ialah reka bentuk modularnya, menjadikannya mudah disesuaikan untuk kes penggunaan yang berbeza. Skrip ujian unit menggunakan Python rangka kerja memastikan bahawa setiap fungsi dalam logik mengikis berfungsi dengan betul. Ia mengesahkan bahawa bekas produk ditemui dan bahawa tajuk serta harga diekstrak. Ini amat penting untuk mengekalkan kebolehpercayaan semasa mengikis perubahan, kerana tapak web sering mengemas kini strukturnya. Suatu ketika, semasa mengikis tapak blog, saya menyedari kepentingan ujian sedemikian—apa yang berkesan satu minggu gagal pada seterusnya, dan ujian itu menjimatkan masa saya untuk menyelesaikan masalah.

Skrip ini juga dibina dengan mengambil kira pengoptimuman dan kebolehgunaan semula. Dengan mengasingkan fungsi boleh guna semula seperti pengambilan HTML dan penghuraian elemen, mereka boleh mengendalikan halaman atau kategori lain di tapak yang sama dengan pelarasan kecil. Modulariti ini memastikan bahawa mengembangkan projek mengikis kekal terurus. Secara keseluruhan, menggabungkan Sup Cantik dan Selenium melengkapkan anda untuk menangani pengikisan kandungan statik dan dinamik dengan berkesan. Dengan kesabaran dan amalan, pengikisan web berubah daripada tugas yang mengecewakan menjadi alat yang bermanfaat untuk pengumpulan data. 🌟

Mengekstrak Data daripada Tapak E-Dagang Menggunakan Sup Cantik

Menggunakan Python dan perpustakaan Beautiful Soup untuk penghuraian HTML dan mengikis web

from bs4 import BeautifulSoup
import requests

# URL of the target page
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"

# Make a GET request to fetch the raw HTML content
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find all product boxes
product_boxes = soup.find_all("div", class_="productContainer")

for product in product_boxes:
    # Extract the title
    title = product.find("div", class_="name").text if product.find("div", class_="name") else "No title"
    # Extract the price
    price = product.find("div", class_="price").text if product.find("div", class_="price") else "No price"
    print(f"Product: {title}, Price: {price}")

Mengikis Kandungan Dinamik dengan Selenium

Menggunakan Python dengan Selenium untuk mengendalikan kandungan yang diberikan JavaScript

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Set up Selenium WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
driver.get(url)

# Wait for the products to load
products = driver.find_elements(By.CLASS_NAME, "productContainer")

for product in products:
    try:
        title = product.find_element(By.CLASS_NAME, "name").text
        price = product.find_element(By.CLASS_NAME, "price").text
        print(f"Product: {title}, Price: {price}")
    except:
        print("Error extracting product details")

driver.quit()

Ujian Unit untuk Pengikis Sup Cantik

Menggunakan modul unittest Python untuk mengesahkan logik mengikis

import unittest
from bs4 import BeautifulSoup
import requests

class TestWebScraper(unittest.TestCase):
    def setUp(self):
        url = "https://www.noon.com/uae-en/sports-and-outdoors/exercise-and-fitness/yoga-16328/"
        response = requests.get(url)
        self.soup = BeautifulSoup(response.content, "html.parser")

    def test_product_extraction(self):
        product_boxes = self.soup.find_all("div", class_="productContainer")
        self.assertGreater(len(product_boxes), 0, "No products found")

    def test_title_extraction(self):
        first_product = self.soup.find("div", class_="productContainer")
        title = first_product.find("div", class_="name").text if first_product.find("div", class_="name") else None
        self.assertIsNotNone(title, "Title not extracted")

if __name__ == "__main__":
    unittest.main()

Meneroka Teknik Lanjutan dalam Mengikis Web

Apabila menangani tapak web yang kompleks untuk mengikis web, satu aspek penting yang perlu dipertimbangkan ialah mengendalikan kandungan dinamik. Banyak tapak web moden bergantung pada JavaScript untuk memuatkan elemen selepas HTML awal dihantar. Ini bermakna alat seperti , yang hanya menghuraikan HTML statik, mungkin gagal menangkap semua data yang diperlukan. Dalam kes sedemikian, menyepadukan alat automasi penyemak imbas seperti menjadi penting. Selenium boleh berinteraksi dengan tapak web seperti pengguna sebenar, menunggu elemen untuk memuatkan dan mengekstrak data dengan sewajarnya. Ini amat berguna apabila mengikis tapak yang menjadikan elemen utama secara tidak segerak. 🌐

Satu lagi pertimbangan penting ialah struktur tapak web dan API asasnya. Sesetengah tapak web mendedahkan titik akhir API berstruktur yang digunakan untuk memuatkan kandungan secara dinamik. Dengan memeriksa aktiviti rangkaian melalui alat pembangun, anda mungkin menemui data JSON yang lebih mudah untuk diekstrak daripada HTML. Sebagai contoh, daripada menghuraikan berbilang teg bersarang untuk butiran produk, anda boleh terus mengambil objek JSON yang mengandungi data bersih dan berstruktur. Kaedah ini lebih pantas, lebih dipercayai dan mengurangkan permintaan pelayan yang tidak perlu. Menggunakan perpustakaan seperti atau untuk interaksi API ialah pendekatan yang sangat baik untuk mengoptimumkan prestasi.

Akhir sekali, amalan mengikis etika dan pematuhan syarat perkhidmatan tapak web tidak boleh diabaikan. Menghormati robots.txt, mengelakkan beban pelayan yang berlebihan melalui pendikitan dan menggunakan pengepala untuk meniru pengguna sebenar ialah amalan terbaik asas. Menambah kelewatan antara permintaan, atau menggunakan perpustakaan seperti atau , memastikan operasi lancar. Apabila saya mula-mula mula mengikis web, saya mengabaikan garis panduan ini, menyebabkan IP saya disekat—pengajaran yang tidak akan saya lupakan! Sentiasa pertimbangkan faktor-faktor ini untuk memastikan pengumpulan data yang cekap dan bertanggungjawab. 🌟

  1. Apakah perpustakaan terbaik untuk menghuraikan HTML dalam Python?
  2. ialah salah satu perpustakaan paling popular untuk penghuraian HTML, menawarkan kaedah yang mudah digunakan untuk mencari elemen dalam halaman web statik.
  3. Bagaimanakah saya boleh mengikis kandungan yang diberikan oleh JavaScript?
  4. Anda boleh menggunakan alat seperti , yang boleh mensimulasikan interaksi pengguna dan menunggu elemen dimuatkan secara dinamik dalam penyemak imbas.
  5. Bagaimanakah saya mengenal pasti elemen HTML yang betul untuk mengikis?
  6. Menggunakan alat pembangun penyemak imbas anda, anda boleh memeriksa dan kenal pasti tag, ID atau nama kelas yang sepadan dengan elemen yang anda perlukan.
  7. Adakah mungkin untuk mengikis data tanpa menghuraikan HTML?
  8. Ya, jika tapak web mempunyai API, anda boleh terus meminta data berstruktur menggunakan perpustakaan seperti atau .
  9. Bagaimanakah saya boleh mengelak daripada disekat semasa mengikis?
  10. Gunakan tajuk seperti untuk meniru pengguna sebenar, menambah kelewatan antara permintaan dan menghormati fail robots.txt tapak.

Mengikis web ialah kemahiran penting untuk mengumpul data dengan cekap, tetapi ia memerlukan penyesuaian pendekatan anda untuk memadankan struktur tapak web. Dengan menggabungkan untuk penghuraian HTML dan alatan seperti Selenium untuk halaman dinamik, anda boleh mengatasi banyak halangan biasa dalam pengekstrakan data.

Memahami nuansa tapak sasaran, seperti pemaparan JavaScript atau titik akhir API, adalah penting untuk kejayaan. Sentiasa ikuti amalan etika seperti permintaan pendikit untuk mengelak daripada disekat. Dengan ketekunan dan alatan yang betul, projek pengikisan yang kompleks pun boleh menjadi terurus dan bermanfaat. 🚀

  1. Dokumentasi rasmi untuk Sup Cantik , perpustakaan Python yang digunakan untuk menghuraikan dokumen HTML dan XML.
  2. Garis panduan dan amalan terbaik daripada Dokumentasi Selenium , yang memberikan cerapan untuk mengautomasikan tindakan penyemak imbas untuk kandungan dinamik.
  3. Cerapan daripada Noon's platform e-dagang , tapak web khusus yang disasarkan untuk tugas mengikis web ini.
  4. Teknik untuk menggunakan permintaan Python dan pengendalian API daripada tapak komuniti Ular Sawa Sebenar .
  5. Strategi tambahan dan amalan pengikisan beretika yang diperoleh daripada Ke arah Sains Data .