iT邦幫忙

0

爬蟲系列-Python 爬蟲環境準備+基礎爬蟲教學

  • 分享至 

  • xImage
  •  

如果對 python 爬蟲不了解可以先看這篇 Python 爬蟲基礎介紹0

環境準備(以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'>

進階環境準備:虛擬環境


ㄧ、基本操作

  1. 發送 HTTP 請求:
    在 Python 中,使用 requests 庫可以輕鬆發送 HTTP 請求。以下是使用 requests 庫發送 GET 請求的基本步驟,並以 PTT 的熱門文章頁面為例進行示範。
    1.導入 requests 庫:首先,確保已經安裝了 requests 庫,然後在你的 Python 腳本中導入它。
import requests
  1. 發送 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}")
  1. 獲取網頁內容:
    如果請求成功,可以使用 response.text 獲取網頁的 HTML 內容。
html_content = response.text
print(html_content)
#會print出整個網頁的html程式碼
  1. 使用 BeautifulSoup 獲取網頁內容並解析 HTML
    接下來,我們將使用 BeautifulSoup 解析從 PTT 獲取的 HTML 內容,以提取熱門文章的標題和連結。
    4-1.導入 BeautifulSoup:
from bs4 import BeautifulSoup
4-2.解析 HTML 內容:

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

soup = BeautifulSoup(response.text, 'html.parser')
4-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 是為了模擬正常使用者的行為,避開網站的反爬蟲檢測,並提高自動化腳本的成功率。這樣可以讓爬蟲更順利地抓取資料,並避免被網站封禁或限制流量。
偽裝爬蟲需要注意請求數量、請求間隔和偽裝行為,並採用分步調試的開發流程,避免被伺服器封鎖。同時要遵守網站的爬取規則和使用條款(如 robots.txt)。

進階環境準備:
Python 虛擬環境 Anaconda 安裝處理套件指令

進階爬蟲技巧:
Python 爬蟲模組 pandas、requests 和 Selenium
Python 爬蟲定位


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

尚未有邦友留言

立即登入留言