使用python迭代获取查询的不同页面

2024-09-27 22:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python解析一系列html页面,但在以迭代方式获取页面时遇到了问题。指向网页的链接。你知道吗

Milano Library

在浏览了源代码之后,我发现了一个函数,它对下一页的button元素上的click事件做出响应。你知道吗

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

我错过了什么?你知道吗

谢谢


Tags: anddatahtml页面urllib2reqphcat
2条回答

您发布的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')
])

使用出色的requests库比使用urllib2库容易得多。。。你知道吗

关于urllib2.urlopenparams用于POST请求。不幸的是,您需要将查询字符串附加到url以发出GET请求。你知道吗

例如:

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

对于请求,这将简单得多:

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

相关问题 更多 >

    热门问题