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

王林
Lepaskan: 2024-08-23 06:02:35
asal
862 orang telah melayarinya

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!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!