


Mengikis Web dengan Python: Panduan Mendalam untuk Permintaan, BeautifulSoup, Selenium dan Scrapy
Mengikis web ialah kaedah yang digunakan untuk mengekstrak maklumat daripada tapak web. Ia boleh menjadi alat yang tidak ternilai untuk analisis data, penyelidikan dan automasi. Python, dengan ekosistem perpustakaan yang kaya, menawarkan beberapa pilihan untuk mengikis web. Dalam artikel ini, kami akan meneroka empat perpustakaan popular: Permintaan, BeautifulSoup, Selenium dan Scrapy. Kami akan membandingkan ciri mereka, memberikan contoh kod terperinci dan membincangkan amalan terbaik.
Jadual Kandungan
- Pengenalan kepada Mengikis Web
- Permintaan Perpustakaan
- Perpustakaan BeautifulSoup
- Perpustakaan Selenium
- Rangka Kerja Scrapy
- Perbandingan Perpustakaan
- Amalan Terbaik untuk Mengikis Web
- Kesimpulan
Pengenalan kepada Web Scraping
Pengikisan web melibatkan pengambilan halaman web dan mengekstrak data berguna daripadanya. Ia boleh digunakan untuk pelbagai tujuan, antaranya:
- Pengumpulan data untuk penyelidikan
- Pemantauan harga untuk e-dagang
- Penggabungan kandungan daripada pelbagai sumber
Pertimbangan Undang-undang dan Etika
Sebelum mengikis mana-mana tapak web, adalah penting untuk menyemak fail robots.txt tapak dan syarat perkhidmatan untuk memastikan pematuhan dengan dasar mengikisnya.
Permintaan Perpustakaan
Gambaran keseluruhan
Pustaka Permintaan ialah cara yang mudah dan mesra pengguna untuk menghantar permintaan HTTP dalam Python. Ia mengabstrakkan banyak kerumitan HTTP, menjadikannya mudah untuk mengambil halaman web.
Pemasangan
Anda boleh memasang Permintaan menggunakan pip:
pip install requests
Penggunaan Asas
Berikut ialah cara menggunakan Permintaan untuk mengambil halaman web:
import requests url = 'https://example.com' response = requests.get(url) if response.status_code == 200: print("Page fetched successfully!") print(response.text) # Prints the HTML content of the page else: print(f"Failed to retrieve the webpage: {response.status_code}")
Mengendalikan Parameter dan Pengepala
Anda boleh menghantar parameter dan pengepala dengan mudah dengan Permintaan:
params = {'q': 'web scraping', 'page': 1} headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, params=params, headers=headers) print(response.url) # Displays the full URL with parameters
Mengendalikan Sesi
Permintaan juga menyokong pengurusan sesi, yang berguna untuk mengekalkan kuki:
session = requests.Session() session.get('https://example.com/login', headers=headers) response = session.get('https://example.com/dashboard') print(response.text)
Perpustakaan BeautifulSoup
Gambaran keseluruhan
BeautifulSoup ialah perpustakaan yang berkuasa untuk menghuraikan dokumen HTML dan XML. Ia berfungsi dengan baik dengan Permintaan untuk mengekstrak data daripada halaman web.
Pemasangan
Anda boleh memasang BeautifulSoup menggunakan pip:
pip install beautifulsoup4
Penggunaan Asas
Berikut ialah cara menghuraikan HTML dengan BeautifulSoup:
from bs4 import BeautifulSoup html_content = response.text soup = BeautifulSoup(html_content, 'html.parser') # Extracting the title of the page title = soup.title.string print(f"Page Title: {title}")
Menavigasi Pokok Parse
BeautifulSoup membolehkan anda menavigasi pokok parse dengan mudah:
# Find all <h1> tags h1_tags = soup.find_all('h1') for tag in h1_tags: print(tag.text) # Find the first <a> tag first_link = soup.find('a') print(first_link['href']) # Prints the URL of the first link
Menggunakan Pemilih CSS
Anda juga boleh menggunakan pemilih CSS untuk mencari elemen:
# Find elements with a specific class items = soup.select('.item-class') for item in items: print(item.text)
Perpustakaan Selenium
Gambaran keseluruhan
Selenium digunakan terutamanya untuk mengautomasikan aplikasi web untuk tujuan ujian tetapi juga berkesan untuk mengikis kandungan dinamik yang diberikan oleh JavaScript.
Pemasangan
Anda boleh memasang Selenium menggunakan pip:
pip install selenium
Menyediakan Pemacu Web
Selenium memerlukan pemacu web untuk penyemak imbas yang ingin anda automasi (cth., ChromeDriver untuk Chrome). Pastikan anda memasang pemacu dan tersedia dalam PATH anda.
Penggunaan Asas
Berikut ialah cara menggunakan Selenium untuk mengambil halaman web:
from selenium import webdriver # Set up the Chrome WebDriver driver = webdriver.Chrome() # Open a webpage driver.get('https://example.com') # Extract the page title print(driver.title) # Close the browser driver.quit()
Berinteraksi dengan Elemen
Selenium membolehkan anda berinteraksi dengan elemen web, seperti mengisi borang dan mengklik butang:
# Find an input field and enter text search_box = driver.find_element_by_name('q') search_box.send_keys('web scraping') # Submit the form search_box.submit() # Wait for results to load and extract them results = driver.find_elements_by_css_selector('.result-class') for result in results: print(result.text)
Mengendalikan Kandungan Dinamik
Selenium boleh menunggu elemen dimuatkan secara dinamik:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Wait for an element to become visible try: element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, 'dynamic-element-id')) ) print(element.text) finally: driver.quit()
Rangka Kerja Scrapy
Gambaran keseluruhan
Scrapy ialah rangka kerja mengikis web yang teguh dan fleksibel yang direka untuk projek mengikis berskala besar. Ia menyediakan sokongan terbina dalam untuk mengendalikan permintaan, menghurai dan menyimpan data.
Pemasangan
Anda boleh memasang Scrapy menggunakan pip:
pip install scrapy
Mencipta Projek Scrapy Baharu
Untuk mencipta projek Scrapy baharu, jalankan arahan berikut dalam terminal anda:
scrapy startproject myproject cd myproject scrapy genspider example example.com
Contoh Asas Labah-labah
Berikut ialah labah-labah mudah yang mengikis data daripada tapak web:
# In myproject/spiders/example.py import scrapy class ExampleSpider(scrapy.Spider): name = 'example' start_urls = ['https://example.com'] def parse(self, response): # Extract data using CSS selectors titles = response.css('h1::text').getall() for title in titles: yield {'title': title} # Follow pagination links next_page = response.css('a.next::attr(href)').get() if next_page: yield response.follow(next_page, self.parse)
Menjalankan Labah-labah
Anda boleh menjalankan labah-labah anda dari baris arahan:
scrapy crawl example -o output.json
Arahan ini akan menyimpan data yang dikikis ke output.json.
Talian Paip Item
Scrapy membolehkan anda memproses data yang dikikis menggunakan saluran paip item. Anda boleh membersihkan dan menyimpan data dengan cekap:
# In myproject/pipelines.py class MyPipeline: def process_item(self, item, spider): item['title'] = item['title'].strip() # Clean the title return item
Mengkonfigurasi Tetapan
Anda boleh mengkonfigurasi tetapan dalam settings.py untuk menyesuaikan projek Scrapy anda:
# Enable item pipelines ITEM_PIPELINES = { 'myproject.pipelines.MyPipeline': 300, }
Comparison of Libraries
Feature | Requests + BeautifulSoup | Selenium | Scrapy |
---|---|---|---|
Ease of Use | High | Moderate | Moderate |
Dynamic Content | No | Yes | Yes (with middleware) |
Speed | Fast | Slow | Fast |
Asynchronous | No | No | Yes |
Built-in Parsing | No | No | Yes |
Session Handling | Yes | Yes | Yes |
Community Support | Strong | Strong | Very Strong |
Best Practices for Web Scraping
Respect Robots.txt: Always check the robots.txt file of the website to see what is allowed to be scraped.
Rate Limiting: Implement delays between requests to avoid overwhelming the server. Use time.sleep() or Scrapy's built-in settings.
User-Agent Rotation: Use different User-Agent strings to mimic different browsers and avoid being blocked.
Handle Errors Gracefully: Implement error handling to manage HTTP errors and exceptions during scraping.
Data Cleaning: Clean and validate the scraped data before using it for analysis.
Monitor Your Scrapers: Keep an eye on your scrapers to ensure they are running smoothly and efficiently.
Conclusion
Web scraping is a powerful tool for gathering data from the web. Choosing the right library or framework depends on your specific needs:
- Requests + BeautifulSoup is ideal for simple scraping tasks.
- Selenium is perfect for dynamic content that requires interaction.
- Scrapy is best suited for large-scale scraping projects that require efficiency and organization.
By following best practices and understanding the strengths of each tool, you can effectively scrape data while respecting the web ecosystem. Happy scraping!
Atas ialah kandungan terperinci Mengikis Web dengan Python: Panduan Mendalam untuk Permintaan, BeautifulSoup, Selenium dan Scrapy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django

Memperkenalkan Toolkit Bahasa Alam (NLTK)

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?
