2012-11-09 54 views
1

我想解析一個使用python的html頁面序列,我在迭代方式中抓取頁面時遇到了問題。到網頁的鏈接。使用python迭代獲取查詢的不同頁面

Milano Library

通過源偷看後,我發現,響應按鈕元素的單擊事件下一個頁面的功能。

function SaltaAPagina() { 
    var CalcPag = VAIAPAGINA.value; 
    if (CalcPag > 0) { 
     CalcPag=CalcPag; 
    } 
    else { 
     CalcPag="1"; 
    } 
    document.location = "/OPACMI01/cat/SDW?W=CODICE_BIBLIO+%3D+%27LO1+01%27+AND+EDITORE+PH+WORDS+%27sonzogno%27+AND+DATA_PUBBLICAZIONE+%3C+1943+ORDER+BY+ORDINAMENTO/Ascend&M=" + CalcPag + "&R=Y"; 
    } 

我知道我可以使用pythons urllib2模塊使用urlencode方法編碼參數。但我不知道我應該包括作爲參數

lomba_link='http://www.biblioteche.regione.lombardia.it/OPACMI01/cat/SDW?W%3DCODICE_BIBLIO+%3D+%27LO1+01%27+AND+EDITORE+PH+WORDS+%27sonzogno%27+AND+DATA_PUBBLICAZIONE+%3C+1943+ORDER+BY+ORDINAMENTO/Ascend%26M%3D1%26R%3DY' 
params = urllib.urlencode([('CalcPag',4)]) 
# this has not worked. 
req = urllib2.Request(lomba_link) 
print req 
response = urllib2.urlopen(req,params) 
html_doc = response.read() 

我在這裏錯過了什麼?

感謝

回答

1

你貼在傳遞一些參數到目標頁面的JavaScript函數:

document.location = "/OPACMI01/cat/SDW" + // This is the path of the page 
    "?W=CODICE_BIBLIO+%3D+%27LO1+01%27+AND+EDITORE+PH+WORDS+%27sonzogno%27+AND+DATA_PUBBLICAZIONE+%3C+1943+ORDER+BY+ORDINAMENTO/Ascend" + // The first parameter 
    "&M=" + CalcPag + // The second parameter 
    "&R=Y"; // The third parameter 

在代碼中,你已經編碼的所有&=符號的URL,所以你傳遞了一個沒有值的單一長參數 - 將這些符號改回到它們在javascript函數中應該做的訣竅。

lomba_link='http://www.biblioteche.regione.lombardia.it/OPACMI01/cat/SDW' 
params = urllib.urlencode([ 
    ('W', 'CODICE_BIBLIO+%3D+%27LO1+01%27+AND+EDITORE+PH+WORDS+%27sonzogno%27+AND+DATA_PUBBLICAZIONE+%3C+1943+ORDER+BY+ORDINAMENTO/Ascend'), 
    ('M', 4), 
    ('R', 'Y') 
]) 
+0

感謝您的答覆。 – feverDream

+0

我測試了代碼片段,但是當我調用urlopen對象時讀取它不抓取頁面。 – feverDream

0

這是很容易的輝煌requests圖書館管理員的工作,而不是urllib2庫...

在問候urllib2.urlopenparams是POST請求。不幸的是,您需要將查詢字符串追加到url以發出GET請求。

如:

req = urllib2.urlopen(req + '?' + params) 

有了要求,這將是簡單得多:

page = requests.get(some_url, params={'CalcPag': '4'})