iT邦幫忙

1

Python 爬蟲基礎教學介紹

  • 分享至 

  • xImage
  •  

大綱

  1. 爬蟲概述
    • 什麼是網路爬蟲:介紹網路爬蟲的基本概念和用途。
    • 爬蟲的應用場景:如資料擷取、數據分析等。
  2. 環境準備
    • 安裝 Python:指導如何安裝 Python 環境。
    • 安裝 pip3:確認 pip3 是否已安裝,並介紹其用途。
    • 安裝必要函式庫:requests beautifulsoup4
  3. 基本操作
    • 發送 HTTP 請求:使用 requests 庫發送 GET 請求。
  4. 使用 BeautifulSoup 解析 HTML
    • HTML 基礎知識:介紹 HTML 結構及常見標籤。
    • 使用 BeautifulSoup 解析網頁內容
  5. 實作專案
    • PTT 網頁爬蟲:爬取特定版面的文章標題和連結。
  6. 常見問題與解決方案
    • 反爬蟲技術:如何處理網站的反爬蟲機制。
    • 錯誤處理:如何處理請求失敗或解析錯誤的情況。
  7. 總結與進階學習資源
    • 進階主題:如 Selenium、自動化測試等

  1. 爬蟲概述
    什麼是網路爬蟲
    網路爬蟲(Web Crawler),也稱為網路蜘蛛(Spider),是一種自動化的軟體應用程式,旨在自動瀏覽互聯網並執行特定任務。這些任務通常涉及向網站發送請求,獲取網頁內容,並從中提取有用的資訊。許多搜尋引擎(如 Google 和 Bing)使用網路爬蟲來收集和索引網站內容,以便用戶在搜尋時能夠快速找到相關資料。
    當用戶在瀏覽器中打開一個網頁時,實際上是向伺服器發送請求(request),伺服器再回傳相應的資料(response)。網路爬蟲則是自動化這一過程,能夠高效地擷取伺服器回傳的特定資料,並進行後續分析和處理

爬蟲的應用場景
網路爬蟲的應用範圍非常廣泛,主要包括以下幾個方面:
資料擷取:許多開發者使用爬蟲技術從各種網站上提取數據,例如價格比較、新聞聚合、社交媒體數據分析等。
數據分析:爬取大量數據後,可以進行深入分析,幫助企業做出更明智的決策,例如市場趨勢分析、用戶行為研究等。
搜尋引擎索引:搜尋引擎利用爬蟲收集網站內容並建立索引,使得用戶能夠快速搜尋到所需資訊。
競爭對手監控:企業可以使用爬蟲監控競爭對手的網站,以獲取有關產品價格、促銷活動和市場策略的信息。

  1. 環境準備(以macOS為例)
    開啟命令提示字元:
    1.在 Windows 系統中,可以按下 Win + R 鍵,輸入 cmd,然後按 Enter 鍵來打開命令提示字元。
    2.安裝必要函式庫:如果顯示版本號,則表示已安裝
    - 確認是否已安裝pip3 --version
    - 使用 pip3 install requests 安裝 requests 庫。
    - 確認是否已安裝pip show beautifulsoup4
    - 使用 pip3 install beautifulsoup4 安裝 BeautifulSoup4 庫。
    from bs4 import BeautifulSoup print(BeautifulSoup) #<class 'bs4.BeautifulSoup'>

Python 爬蟲基礎教學介紹:ㄧ、基本操作

  1. 基本操作
    發送 HTTP 請求:
    在 Python 中,使用 requests 庫可以輕鬆發送 HTTP 請求。以下是使用 requests 庫發送 GET 請求的基本步驟,並以 PTT 的熱門文章頁面為例進行示範。
    1.導入 requests 庫:首先,確保已經安裝了 requests 庫,然後在你的 Python 腳本中導入它。
import requests
2.發送 GET 請求:

使用 requests.get() 方法向 PTT 的熱門文章頁面發送請求。以下是獲取 PTT 手機版熱門文章的範例:

url = 'https://www.ptt.cc/bbs/index.html'
response = requests.get(url)
print(response.text)
3.檢查響應狀態碼:

在處理響應之前,檢查請求是否成功。HTTP 狀態碼 200 表示請求成功

if response.status_code == 200:
    print("成功獲取網頁內容")
else:
    print(f"請求失敗,狀態碼:{response.status_code}")
4.獲取網頁內容:

如果請求成功,可以使用 response.text 獲取網頁的 HTML 內容。

html_content = response.text
print(html_content)
#會print出整個網頁的html程式碼
  1. 使用 BeautifulSoup 獲取網頁內容並解析 HTML
    接下來,我們將使用 BeautifulSoup 解析從 PTT 獲取的 HTML 內容,以提取熱門文章的標題和連結。
    1.導入 BeautifulSoup:
from bs4 import BeautifulSoup
2.解析 HTML 內容:

使用 BeautifulSoup 對獲取的 HTML 內容進行解析。

soup = BeautifulSoup(response.text, 'html.parser')
3.提取熱門文章標題和連結:

使用 CSS 選擇器提取文章標題和連結。以下是提取標題的範例:

titles = soup.find_all('div',class_="board-title")
for title in titles:
    print(title.text)

完整範例代碼

import requests
from bs4 import BeautifulSoup
# print(BeautifulSoup)

url = 'https://www.ptt.cc/bbs/index.html'
response = requests.get(url)

# 檢查回應狀態碼是否為 200
if response.status_code == 200:
    print("成功獲取網頁內容")
else:
    print(f"請求失敗,狀態碼:{response.status_code}")

soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.find_all('div',class_="board-title")
for title in titles:
    print(title.text)

  1. 實作專案
    專案範例:
    PTT 網頁爬蟲:爬取特定版面的文章標題和連結。
url = "https://www.ptt.cc/bbs/MobileComm/index.html"

# 自訂 headers,模仿瀏覽器的 User-Agent
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 傳送帶有 headers 的請求
response = requests.get(url, headers=headers)
    
# 檢查回應狀態碼是否為 200
if response.status_code == 200:
    # 使用 BeautifulSoup 解析網頁
    soup = BeautifulSoup(response.text, 'html.parser')

    # 找到所有標題的連結
    titles = soup.select("div.title a")
    for title in titles:
        print(title['href'], title.text)
else:
    print(f"Failed to retrieve the page. Status code: {response.status_code}")

偽裝 HTTP 請求

(尤其是 User-Agent 和其他 header)通常是為了避免被網站的反爬蟲機制識別和封鎖。
許多網站會檢查進入的請求,並嘗試識別是否來自機器人或自動化腳本。
這些網站通常會根據以下一些原因封鎖或限制自動化請求:

  1. 反爬蟲機制:
    很多網站會設置反爬蟲機制來識別和阻止自動化工具。這些機制會檢查 HTTP 請求中的 User-Agent,Referer,Accept-Encoding 等 header,來識別是否為瀏覽器發出的請求,還是來自腳本或爬蟲。如果請求的 header 不符合正常瀏覽器的模式,網站會認為這是自動化工具的請求,並將其拒絕或限制。

偽裝 User-Agent 或其他 headers 是為了讓自動化工具看起來像是來自正常的用戶,從而避免被識別為爬蟲。

  1. 提高成功率:
    有些網站對爬蟲的請求會給出 403 Forbidden 或 503 Service Unavailable 等錯誤,導致無法成功抓取資料。偽裝成瀏覽器的請求,可以避免這些限制,讓請求更容易成功。許多網站可能會允許瀏覽器進行爬取,但阻止自動化腳本的訪問,因此模擬瀏覽器行為是一種有效的方法。

  2. 避免 IP 被封禁:
    如果一個網站發現短時間內來自同一個 IP 的大量請求,並且這些請求的 header 看起來像是自動化的(例如,User-Agent 是 Python 爬蟲的預設值),它有可能將該 IP 封禁。偽裝 header 可以減少這樣的風險,從而避免 IP 被封鎖。

  3. 模擬正常使用者行為:
    偽裝成正常的瀏覽器請求不僅能避開反爬蟲機制,還能模擬真正的使用者行為,這對於某些需要模擬使用者交互的情況很有用。例如,有些網站可能會根據不同的 User-Agent 做出不同的回應(如行動版與桌面版網站呈現不同的頁面),所以模擬正確的 User-Agent 可以確保爬取到正確的頁面。

  4. 網站限制不同裝置的流量:
    有些網站會根據請求中的 User-Agent 來判斷該請求來自哪種裝置(例如桌面或行動裝置)。這樣,爬蟲也可以根據需要調整自己的請求,以適應不同版本的頁面。

範例:
假設你要爬取某個網站的資料,並且該網站有反爬蟲機制,若你不偽裝請求,網站可能會返回 403 或 503 錯誤,或者限制你的訪問。通過偽裝請求,你可以讓網站認為你是一個正常的瀏覽器使用者,從而順利獲取資料。

結論:
偽裝 HTTP headers 是為了模擬正常使用者的行為,避開網站的反爬蟲檢測,並提高自動化腳本的成功率。這樣可以讓爬蟲更順利地抓取資料,並避免被網站封禁或限制流量。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言