網頁抓取是在沒有直接 API 可用時從網站收集資料的寶貴技能。無論您是提取產品價格、收集研究數據還是建立資料集,網頁抓取都提供了無限的可能性。
在這篇文章中,我將使用 Python 作為我們的主要工具,向您介紹網頁抓取的基礎知識、您需要的工具以及要遵循的最佳實踐。
網頁抓取是從網站擷取資料的過程。這是透過向網站發出請求、解析 HTML 程式碼以及識別資料所在的模式或標籤來完成的。本質上,我們的行為就像一個網頁瀏覽器,但我們不是顯示內容,而是提取和處理資料。
Python 擁有優良的網頁抓取生態系統,常用的函式庫如下:
請求:處理向網站發送 HTTP 請求並接收回應。
pip install requests
BeautifulSoup:一個允許我們解析 HTML 和 XML 文件的庫,可以輕鬆導航資料結構並提取相關資訊。
pip install beautifulsoup4
Selenium:一種更進階的工具,用於抓取動態網頁,尤其是那些依賴 JavaScript 的網頁。它會在提取資料之前自動讓網頁瀏覽器呈現頁面。
pip install selenium
Pandas:雖然不嚴格用於網頁抓取,但 Pandas 對於以結構化格式(例如 CSV、Excel 或資料庫)清理、分析和儲存抓取的資料很有用。
pip install pandas
讓我們從抓取靜態網頁開始,其中的資料可直接在 HTML 來源中取得。在這個例子中,我們將抓取一個加密貨幣價格表。
import requests from bs4 import BeautifulSoup # Step 1: Make an HTTP request to get the webpage content url = 'https://example.com/crypto-prices' response = requests.get(url) # Step 2: Parse the HTML content using BeautifulSoup soup = BeautifulSoup(response.content, 'html.parser') # Step 3: Find and extract data (e.g., prices from a table) table = soup.find('table', {'id': 'crypto-table'}) rows = table.find_all('tr') # Step 4: Iterate through rows and extract text data for row in rows[1:]: cols = row.find_all('td') name = cols[0].text.strip() price = cols[1].text.strip() print(f'{name}: {price}')
許多現代網站使用 JavaScript 動態載入數據,這意味著您正在尋找的資訊可能無法直接在頁面來源中取得。在這種情況下,Selenium 可用於渲染頁面並提取資料。
from selenium import webdriver from selenium.webdriver.common.by import By # Step 1: Set up Selenium WebDriver (e.g., ChromeDriver) driver = webdriver.Chrome(executable_path='path_to_chromedriver') # Step 2: Load the webpage driver.get('https://example.com') # Step 3: Interact with the page or wait for dynamic content to load element = driver.find_element(By.ID, 'dynamic-element') # Step 4: Extract data print(element.text) # Step 5: Close the browser driver.quit()
尊重網站規則:始終檢查網站的robots.txt文件以了解允許您抓取的內容。例如:https://example.com/robots.txt。
使用延遲來避免速率限制:如果您過快發出太多請求,某些網站可能會阻止您的 IP。在請求之間使用 time.sleep() 以避免被阻塞。
使用標頭和用戶代理:網站通常會阻止非瀏覽器請求。透過設定自訂標頭,尤其是用戶代理,您可以模仿真實的瀏覽器。
headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers)
處理分頁:如果資料分佈在多個頁面上,您需要遍歷頁面來抓取所有內容。通常可以透過修改 URL 查詢參數來實現此目的。
錯誤處理:隨時準備好處理錯誤,例如資料遺失或請求失敗。即使網站結構發生變化,這也可以確保您的抓取工具順利運作。
抓取資料後,必須儲存以進行進一步分析。您可以使用 Pandas 將資料轉換為 DataFrame 並將其儲存為 CSV:
import pandas as pd data = {'Name': ['Bitcoin', 'Ethereum'], 'Price': [45000, 3000]} df = pd.DataFrame(data) df.to_csv('crypto_prices.csv', index=False)
或者,如果您打算使用較大的資料集,您可以將資料儲存到 SQLite 或 PostgreSQL 等資料庫。
刮擦必須始終符合道德規範。以下是一些需要記住的事情:
始終遵守網站的服務條款。
不要因為太多請求而使伺服器超載。
如果有可用的 API,請使用它而不是抓取網站。
如果您打算發佈或分享抓取的數據,請註明資料來源。
網路抓取是資料收集的強大工具,但需要仔細考慮道德和技術因素。透過 Requests、BeautifulSoup 和 Selenium 等工具,Python 可以輕鬆上手。透過遵循最佳實務並留意網站規則,您可以有效地收集和處理專案的有價值的資料。
刮取快樂!
以上是使用 Python 進行網頁抓取的初學者指南:最佳實踐和工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!