2013-06-26 71 views
2

我使用Python機械化打開這種格式的URL打開網址...Python的機械化 - 以hash符號

https://www.simplewebsite.com?view=discussions#/?page=2 

當頁面打開......它得到這個...

https://www.simplewebsite.com?view=discussions 

完全繞開了「#」標誌後有什麼...

任何線索如何打開網址是什麼?我花了很多時間在網上搜索...沒有正面回答......

回答

-2

您使用的查詢字符串:

view=discussions%23%2F%3Fpage%3D2 

?例如:

import mechanize as mech 
from urllib import urlencode 

host = "http://localhost:8080/1.php" 

data = {"view": "discussions#/?page=2"} 
data = urlencode(data) 
print "encoded data sent by python:\n\t", data 

resp = mech.urlopen(host + "?" + data) 
print resp.read() 

它當然'有效'。另一方是否知道如何正確解碼和解析查詢字符串是另一回事。舉例來說,如果你要求在http://localhost:8080/1.php以下php程序:

<?php 

parse_str(
    urldecode($_SERVER['QUERY_STRING']), 
    $data 
); 

//You might also call htmlentities() on the query string 
//if a browser was going to display the result 


echo "php received the following data:\n"; 

foreach($data as $key => $val) 
{ 
    echo "\t $key ----> $val \n"; 
} 

?> 

... Python程序輸出:

encoded data sent by python: 
    view=discussions%23%2F%3Fpage%3D2 

php received the following data: 
    view ----> discussions#/?page=2 

至於這樣的:

When the page opens...it gets this... 

    https://www.simplewebsite.com?view=discussions 

Completely bypassing what's after the "#" mark... 

RFC說:

查詢組件由第一個問號(「?」) 字符指示,並以URI結尾的數字符號(「#」)字符或 結尾。 http://tools.ietf.org/html/rfc3986#section-3.4

+0

7stud ...謝謝...但不起作用...即使用它的編碼代碼替換「#」也沒有幫助... – user2526046

+0

您應該嘗試對整個查詢字符串進行urlencode,如我發佈的例子。 – 7stud

1

最有可能該網站依靠的JavaScript解析URL的其餘部分(#後);見window.location

除非Mechanize可以以某種方式運行JavaScript,否則不會得到您想要的結果。嘗試Selenium,Phantom.JS/Phantompy或類似的東西。

該網站實際上可能支持直接傳遞參數,那麼你可以要求

https://www.simplewebsite.com?view=discussions&page=2 

如果沒有,你就必須檢查AJAX查詢它對請你其實想的數據。

+0

謝謝Koterpillar ...我以爲這樣的東西...但希望有一些破解或東西:) – user2526046

+0

'&page = 2'是一個黑客我會嘗試。您介意發佈實際的網站網址嗎? – Koterpillar

+0

我已經嘗試使用&page = 2但不起作用......並且對於實際的URL ...這是我公司的協作空間,需要用戶和密碼才能訪問...... – user2526046

1

哈希標籤後面出現的URL部分是對HTML錨點的引用,它們由客戶端(通常是Web瀏覽器)處理,並且永遠不會發送到服務器。

該網站很可能是加載頁面加載運行的Javascript代碼。該代碼解析錨點名稱並更新頁面基礎。在這種情況下,很明顯,JavaScript代碼將不得不向服務器發送ajax請求以獲取第2頁,然後更新HTML文檔以顯示該數據。

不幸的是,機械化將無法處理這種類型的網站,因爲它取決於客戶端上運行的Javascript代碼。你可以用phantom.js做一些這樣的事情,一個可以運行客戶端腳本的無頭網頁瀏覽器客戶端。

+0

感謝Miguel ...我實際上需要使用Mechanize和Python ...所以雖然phantom.js看起來很酷...我不認爲我可以從我的場景中使用它... – user2526046

+0

然後,您需要確保目標網站不運行客戶端JavaScript,因爲你的軟件無法做到這一點。這與搜索引擎在嘗試索引Ajax網站時遇到的問題相同,這是一個棘手的問題。 – Miguel