Trình quét web Python nâng cao

Xây dựng một trình quét web nâng cao bằng Python. Tìm hiểu cách trích xuất dữ liệu trang, xử lý các khối tác nhân người dùng, quản lý giới hạn tốc độ và kết quả đầu ra cấu trúc.

Thử trong Trình chỉnh sửa

Tổng quan

Quét web liên quan đến việc tìm nạp các trang web theo chương trình và phân tích cấu trúc HTML của chúng để trích xuất dữ liệu cụ thể. Trong Python, điều này được thực hiện theo cách truyền thống bằng cách sử dụng `request` và `BeautifulSoup`.

Máy cạp nâng cao yêu cầu cấu hình mạnh mẽ. Chỉ cần yêu cầu các trang có thể dẫn đến chặn hoặc cấm IP, yêu cầu tùy chỉnh tiêu đề như Tác nhân người dùng tùy chỉnh và đưa ra các khoảng thời gian trễ ngẫu nhiên.

Ví dụ tương tác này bắt chước việc cạo dữ liệu mô phỏng bằng xác thực. Nó trình bày cách xác định vị trí các vùng chứa lồng nhau, xử lý thời gian chờ của mạng và cấu trúc dữ liệu đầu ra thành danh sách sạch.

Đầu ra mã & thực thi

Quy trình quét web có các tiêu đề tùy chỉnh, quản lý thời gian chờ và cấu trúc trình phân tích cú pháp HTML.

import requests
from bs4 import BeautifulSoup
import time

def scrape_quotes():
    # Mock URL designed for scraping practice
    url = "https://quotes.toscrape.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    print(f"Initiating request to: {url}...")
    try:
        # Request with timeout protection
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, "html.parser")
        quotes = soup.find_all("div", class_="quote", limit=3)
        
        results = []
        for q in quotes:
            text = q.find("span", class_="text").text
            author = q.find("small", class_="author").text
            tags = [t.text for t in q.find_all("a", class_="tag")]
            results.append({
                "quote": text,
                "author": author,
                "tags": tags
            })
            
        print("Scrape completed successfully!\n")
        for idx, item in enumerate(results):
            print(f"Quote {idx+1}: {item['quote']}")
            print(f"  Author: {item['author']}")
            print(f"  Tags:   {', '.join(item['tags'])}\n")
            
    except requests.exceptions.RequestException as e:
        print(f"Network error occurred: {e}")

scrape_quotes()
Đầu ra thiết bị đầu cuối
Initiating request to: https://quotes.toscrape.com/...
Scrape completed successfully!

Quote 1: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
  Author: Albert Einstein
  Tags:   change, deep-thoughts, thinking

Quote 2: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
  Author: J.K. Rowling
  Tags:   abilities, choices

Quote 3: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
  Author: Albert Einstein
  Tags:   inspirational, life, live, miracle

Triển khai từng bước

  • Giám sát và theo dõi giá trên các danh mục mua sắm
  • Phân tích tình cảm bằng cách thu thập dữ liệu đánh giá từ các diễn đàn
  • Tạo bộ dữ liệu nghiên cứu học thuật

Câu hỏi thường gặp

Robot.txt là gì?

Tệp văn bản được đặt ở thư mục gốc của miền cho biết đường dẫn nào mà rô-bốt tìm kiếm và trình thu thập thông tin được phép hoặc cấm thu thập dữ liệu. Bạn phải luôn đọc nó trước khi viết một cái cạp.

Làm cách nào tôi có thể loại bỏ các trang được hiển thị động thông qua JavaScript?

Yêu cầu tiêu chuẩn chỉ tìm nạp HTML tĩnh. Để phân tích các trang nặng Javascript, bạn phải sử dụng các công cụ tự động hóa trình duyệt như Playwright hoặc Selenium.

Chủ đề liên quan