2012-08-15 25 views
2

我試圖從網頁獲取一些數據,但是我發現了一個問題。每當我想要進入下一頁(即第2頁)以繼續檢索其上的數據時,我總是從第1頁接收數據。顯然嘗試切換到下一頁出現了問題。urllib2沒有檢索帶有哈希值的url

的事情是,我還沒有與網址的問題是這樣的:

'http://www.webpage.com/index.php?page=' + str(pageno) 

我就可以開始了一段聲明,我就加1「您做生意」

跳轉到第2頁

我的問題來時,我試圖打開一個URL這種格式:

'http://www.webpage.com/search/?show_all=1#sort_order=ASC&page=' + str(pageno) 

由於

urllib2.urlopen('http://www.webpage.com/search/?show_all=1#sort_order=ASC&page=4').read() 

將會從http://www.webpage.com/search/?show_all=1

的源代碼有沒有其他方法來檢索其他頁面,而無需使用散列,就我而言。

我想這只是urllib2忽略散列,因爲它通常用於指定瀏覽器的起點。

+0

在#標記之後有一個查詢字符串是無稽之談 - 這永遠不會是一個有效的URL。 – 2012-08-15 12:07:34

回答

5

散列(#)符號之後的URL片段用於客戶端處理,並未實際發送到Web服務器。我的猜測是在頁面上有一些使用AJAX從服務器請求正確數據的JavaScript,並且您需要弄清楚使用哪個URL。

如果您使用chrome,則可以查看開發人員工具的「網絡」選項卡,並查看當您單擊鏈接轉到瀏覽器中的第二頁時請求的網址。

+0

就是這樣。我不知道Chrome上的網絡標籤。只要我點擊第2頁,我就可以得到我需要的網址。謝謝! – jbern 2012-08-15 12:11:20

1

這是因爲哈希不是發送到服務器的url的一部分,它是一個片段標識符,用於標識頁面內的元素。儘管有些網站濫用JavaScript鉤子的散列片段來識別頁面。您需要能夠在頁面上執行JavaScript,否則您需要對JavaScript進行反向工程,並模擬正在進行的真正的搜索請求,大概是通過ajax。 Firebug的Net標籤對此非常有用。