Rumah pembangunan bahagian belakang Tutorial Python Mengikis Web dengan Python: Panduan Mendalam untuk Permintaan, BeautifulSoup, Selenium dan Scrapy

Mengikis Web dengan Python: Panduan Mendalam untuk Permintaan, BeautifulSoup, Selenium dan Scrapy

Aug 23, 2024 am 06:02 AM

Web Scraping with Python: An In-Depth Guide to Requests, BeautifulSoup, Selenium, and 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

  1. Pengenalan kepada Mengikis Web
  2. Permintaan Perpustakaan
  3. Perpustakaan BeautifulSoup
  4. Perpustakaan Selenium
  5. Rangka Kerja Scrapy
  6. Perbandingan Perpustakaan
  7. Amalan Terbaik untuk Mengikis Web
  8. 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
Salin selepas log masuk

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}")
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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}")
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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()
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

Menjalankan Labah-labah

Anda boleh menjalankan labah-labah anda dari baris arahan:

scrapy crawl example -o output.json
Salin selepas log masuk

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
Salin selepas log masuk

Mengkonfigurasi Tetapan

Anda boleh mengkonfigurasi tetapan dalam settings.py untuk menyesuaikan projek Scrapy anda:

# Enable item pipelines
ITEM_PIPELINES = {
    'myproject.pipelines.MyPipeline': 300,
}
Salin selepas log masuk

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

  1. Respect Robots.txt: Always check the robots.txt file of the website to see what is allowed to be scraped.

  2. Rate Limiting: Implement delays between requests to avoid overwhelming the server. Use time.sleep() or Scrapy's built-in settings.

  3. User-Agent Rotation: Use different User-Agent strings to mimic different browsers and avoid being blocked.

  4. Handle Errors Gracefully: Implement error handling to manage HTTP errors and exceptions during scraping.

  5. Data Cleaning: Clean and validate the scraped data before using it for analysis.

  6. 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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Mar 05, 2025 am 09:58 AM

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Cara memuat turun fail di python Cara memuat turun fail di python Mar 01, 2025 am 10:03 AM

Cara memuat turun fail di python

Penapisan gambar di python Penapisan gambar di python Mar 03, 2025 am 09:44 AM

Penapisan gambar di python

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Mar 10, 2025 pm 06:54 PM

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Bekerja Dengan Dokumen PDF Menggunakan Python Cara Bekerja Dengan Dokumen PDF Menggunakan Python Mar 02, 2025 am 09:54 AM

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django Cara Cache Menggunakan Redis dalam Aplikasi Django Mar 02, 2025 am 10:10 AM

Cara Cache Menggunakan Redis dalam Aplikasi Django

Memperkenalkan Toolkit Bahasa Alam (NLTK) Memperkenalkan Toolkit Bahasa Alam (NLTK) Mar 01, 2025 am 10:05 AM

Memperkenalkan Toolkit Bahasa Alam (NLTK)

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Mar 10, 2025 pm 06:52 PM

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?

See all articles