2010-07-09 50 views
2

我試圖抓取一個頁面(我的路由器的管理頁面),但該設備似乎正在爲urllib2提供一個不同的頁面,而不是我的瀏覽器。有沒有人發現過這個?我怎樣才能解決它?urllib2返回瀏覽器不同的頁面?

這個我正在使用的代碼:

>>> from BeautifulSoup import BeautifulSoup 
>>> import urllib2 
>>> page = urllib2.urlopen("http://192.168.1.254/index.cgi?active_page=9133&active_page_str=page_bt_home&req_mode=0&mimic_button_field=btn_tab_goto:+9133..&request_id=36590071&button_value=9133") 
>>> soup = BeautifulSoup(page) 
>>> soup.prettify() 

(HTML輸出由降價刪除)

+1

P r o v e i t。 – 2010-07-09 06:28:52

回答

0

使用Wireshark看到瀏覽器的要求是什麼樣子,並添加缺少的部分,使您的請求看起來一樣。

要調整urllib2標題,請嘗試this

1

比Wireshark簡單可能是使用Firebug來查看請求的形式,然後在您的代碼中模擬相同。

5

With 螢火蟲觀看什麼標題和cookie發送到服務器。然後用urllib2.Requestcookielib模擬相同的請求。

編輯:也可以使用mechanize

+1

機械化是一個可愛的圖書館! – Zolomon 2010-07-09 09:07:38

0

也許這是行不通的,因爲你沒有提供的憑據

管理頁面

使用mechanize加載登錄頁面,並填寫用戶名/密碼。

然後你應該有一個cookie設置爲允許你繼續管理頁面。

僅使用urllib2就困難得多。如果您選擇堅持該路線,您將需要自行管理這些餅乾。

0
在我的情況

它是下列之一:

1)網站vould瞭解,訪問不是從瀏覽器,所以我不得不假的瀏覽器在Python這樣的:

# Build a opener to fake a browser... Google here I come! 
opener = urllib2.build_opener() 
# To fake the browser 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
#Read the page 
soup = BeautifulSoup(opener.open(url).read()) 

2)頁面內容由javascript動態填充。在這種情況下閱讀以下帖子:https://stackoverflow.com/a/11460633/2160507

相關問題