1

Python を使用して一連の html ページを解析しようとしていますが、反復的な方法でページを取得するのに問題があります。Web ページへのリンク。

ミラノ図書館

ソースを調べたところ、次のページのボタン要素のクリック イベントに応答する関数が見つかりました。

 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";
    }

urlencode メソッドを使用して、pythons urllib2 モジュールを使用してパラメーターをエンコードできることを知っています。しかし、パラメータとして何を含めるべきかわかりません

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()

ここで何が欠けていますか?

ありがとう

4

2 に答える 2

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 内のすべての&および=記号をエンコードしたため、値のない 1 つの長いパラメーターを渡しています。これらの記号を 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')
])
于 2012-11-09T01:46:24.043 に答える
0

requestsライブラリよりも、華麗なライブラリを使用する方がはるかに簡単urllib2です...

に関してはurllib2.urlopenparamsPOST リクエスト用です。残念ながら、GET 要求を行うには、クエリ文字列を URL に追加する必要があります。

例えば:

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

リクエストを使用すると、これははるかに簡単になります。

page = requests.get(some_url, params={'CalcPag': '4'})
于 2012-11-09T01:49:58.400 に答える