整體思路
網絡資源爬取通常分為以下幾個步驟:
- 發送 HTTP 請求:使用
requests
庫向目標網站發送請求,獲取網頁的 HTML 內容。 - 解析 HTML 內容:使用
BeautifulSoup
庫解析 HTML 內容,從中提取所需的數據。 - 處理數據:對提取的數據進行清洗、存儲等操作。
代碼實現
import requests
from bs4 import BeautifulSoup
def scrape_website(url):
? ? try:
? ? ? ? # 發送 HTTP 請求獲取網頁內容
? ? ? ? # requests.get 方法會向指定的 URL 發送一個 GET 請求
? ? ? ? response = requests.get(url)
? ? ? ? # 檢查響應狀態碼,如果狀態碼不是 200,會拋出 HTTPError 異常
? ? ? ? response.raise_for_status()
? ? ? ? # 使用 BeautifulSoup 解析 HTML
? ? ? ? # 'html.parser' 是 Python 內置的 HTML 解析器
? ? ? ? soup = BeautifulSoup(response.text, 'html.parser')
? ? ? ? # 這里可以根據網頁結構提取你需要的信息
? ? ? ? # 例如,提取所有的標題標簽
? ? ? ? titles = soup.find_all('title')
? ? ? ? for title in titles:
? ? ? ? ? ? print(title.text)
? ? ? ? # 示例:提取所有的鏈接
? ? ? ? links = soup.find_all('a')
? ? ? ? for link in links:
? ? ? ? ? ? href = link.get('href')
? ? ? ? ? ? if href:
? ? ? ? ? ? ? ? print(href)
? ? except requests.RequestException as e:
? ? ? ? print(f"請求發生錯誤: {e}")
? ? except Exception as e:
? ? ? ? print(f"發生未知錯誤: {e}")
if __name__ == "__main__":
? ? # 要爬取的網頁 URL
? ? url = 'https://www.example.com'
? ? scrape_website(url)
? ?
代碼說明
- 導入必要的庫:
requests
:用于發送 HTTP 請求,獲取網頁內容。BeautifulSoup
:用于解析 HTML 內容,方便提取所需的數據。
- 定義爬取函數:
scrape_website
函數接收一個 URL 作為參數,向該 URL 發送 HTTP 請求并解析響應內容。
- 發送請求并檢查狀態:
requests.get(url)
:向指定的 URL 發送一個 GET 請求,并返回一個響應對象。response.raise_for_status()
:檢查響應狀態碼,如果狀態碼不是 200,會拋出HTTPError
異常。
- 解析 HTML:
BeautifulSoup(response.text, 'html.parser')
:使用BeautifulSoup
解析 HTML 內容,response.text
是響應的文本內容,'html.parser'
是 Python 內置的 HTML 解析器。
- 提取數據:
soup.find_all('title')
:查找所有的<title>
標簽,并返回一個列表。soup.find_all('a')
:查找所有的<a>
標簽,并返回一個列表。link.get('href')
:獲取<a>
標簽的href
屬性值。
- 處理異常:
requests.RequestException
:捕獲請求過程中可能出現的異常,如網絡連接錯誤、請求超時等。Exception
:捕獲其他未知異常。
- 主程序:
- 調用
scrape_website
函數,傳入要爬取的網頁 URL
- 調用
教程
1. 安裝必要的庫
在運行代碼前,你需要安裝requests
和beautifulsoup4
庫。可以使用以下命令進行安裝:
pip install requests beautifulsoup4
2. 替換 URL
將代碼中的url = 'https://www.example.com'
替換為你要爬取的實際網頁 URL。
3. 提取所需數據
根據目標網頁的 HTML 結構,使用BeautifulSoup
的方法提取你需要的數據。常見的方法有:
find()
:查找第一個匹配的標簽。find_all()
:查找所有匹配的標簽。select()
:使用 CSS 選擇器查找標簽。
4. 處理數據
提取到數據后,你可以對其進行清洗、存儲等操作。例如,將數據保存到文件中或存儲到數據庫中。
5. 遵守規則
在爬取網頁時,要遵守網站的robots.txt
規則和相關法律法規,避免對網站造成不必要的負擔。
?
?