首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 利用 mechanize 模組模擬瀏覽器操作完整指南

     編輯:更多程式設計知識

在 Python 中編寫網頁自動化腳本時,能夠快速在命令列或腳本中實例化一個瀏覽器對象是非常實用的技能。mechanize 模組正是為此而生,它提供了高度擬真的瀏覽器行為模擬,支援 Cookie 管理、代理設定、表單提交、紅向處理等核心功能,讓你無需啟動真實瀏覽器即可完成複雜的網頁互動任務。

核心功能與優勢

  • 完整的瀏覽器行為模擬:支援重導向、Referer、Robots.txt、Gzip 壓縮、等效標頭等
  • 內建 Cookie 管理:透過 cookielib.LWPCookieJar 自動處理 Session Cookie,免去手動維護登入狀態的麻煩
  • 靈活的代理支援:支援 HTTP 代理、認證代理,滿足企業級網路環境需求
  • 表單自動化操作:可列出、選擇、填寫並提交表單,模擬使用者搜尋、登入等行為
  • 歷史導航控制:支援前進、後退、點擊連結等瀏覽歷史操作

快速上手:建立瀏覽器實例

以下程式碼展示如何配置一個功能完整的瀏覽器對象 br:

import mechanize
import cookielib

# 建立瀏覽器實例
br = mechanize.Browser()

# 設定 Cookie Jar,自動儲存與重送 Session Cookie
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# 瀏覽器行為選項
br.set_handle_equiv(True)       # 處理 HTTP-EQUIV 標頭
br.set_handle_gzip(True)        # 支援 Gzip 解壓縮
br.set_handle_redirect(True)    # 自動追蹤重導向
br.set_handle_referer(True)     # 自動發送 Referer
br.set_handle_robots(False)     # 忽略 robots.txt(視需求啟用)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)  # 處理 Refresh

# 設定 User-Agent 偽裝為 Firefox
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

常見操作範例

開啟網頁並提取資訊

r = br.open('https://google.com')
html = r.read()
print html                    # 顯示原始碼
print br.title()              # 顯示頁面標題
print r.info()                # 顯示回應標頭

表單操作:搜尋關鍵字

# 列出所有表單
for f in br.forms():
    print f

# 選擇第一個表單(索引 0)
br.select_form(nr=0)

# 填寫欄位並提交
br.form['q'] = 'weekend codes'
br.submit()
print br.response().read()

HTTP Basic Auth 驗證

br.add_password('https://safe-site.domain', 'username', 'password')
br.open('https://safe-site.domain')

連結點擊與歷史導航

# 點擊特定文字的連結
req = br.click_link(text='Weekend codes')
br.open(req)
print br.geturl()

# 返回上一頁
br.back()
print br.geturl()

檔案下載

f = br.retrieve('https://www.google.com.br/intl/pt-BR_br/images/logo.gif')[0]
print f
fh = open(f)

設定 HTTP 代理

# 帳密代理
br.set_proxies({"http": "joe:password@myproxy.example.com:3128"})

# 一般代理
br.set_proxies({"http": "myproxy.example.com:3128"})

# 代理認證
br.add_proxy_password("joe", "password")

輕量級替代方案

若僅需簡單抓取網頁內容,不需要完整瀏覽器模擬,可直接使用 urllib2 或 urllib:

# 簡單 GET
import urllib2
print urllib2.urlopen('https://stockrt.github.com').read()

# 帶認證
import urllib
opener = urllib.FancyURLopener()
print opener.open('https://user:password@stockrt.github.com').read()

Cookie 機制深度解析

HTTP 是無狀態協定,Cookie 成為客戶端與伺服器維持狀態的關鍵。以新浪微博為例,使用者登入後,伺服器回傳 Session Cookie,後續請求必須攜帶此 Cookie 才能存取受保護資源。

在 Python 中,cookielib 提供 CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar 等類別,配合 urllib2.HTTPCookieProcessor 即可自動管理 Cookie:

import urllib2, urllib, cookielib

data = {"email": "用戶名", "password": "密碼"}
post_data = urllib.urlencode(data)

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

headers = {"User-agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
req = urllib2.Request("https://www.renren.com/PLogin.do", post_data, headers)
content = opener.open(req)
print content.read().decode("utf-8").encode("gbk")

此方式將 Cookie 自動儲存於 cj 中,後續請求會自動附帶,無需手動處理。

延伸閱讀

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved