Python 3 urllib.request发送cookie,获取结果

Python 3 urllib.request发送cookie,获取结果,python,python-3.x,cookies,urllib,Python,Python 3.x,Cookies,Urllib,我正在尝试检索这些结果的第二页: 如果我点击底部的第2页,它会转到第2页,但URL保持不变。如果我查看http头,我可以看到以下cookie: Set-Cookie: sportstats_preferences="{\"raceId\":451,\"firstRow\":40, \"category\":\"All Categories\",\"chronosStep\":\"INSTRUCTIONS \",\"facebookLoggedIn\":false,\"twitterLogged

我正在尝试检索这些结果的第二页:

如果我点击底部的第2页,它会转到第2页,但URL保持不变。如果我查看http头,我可以看到以下cookie:

Set-Cookie: sportstats_preferences="{\"raceId\":451,\"firstRow\":40,
\"category\":\"All Categories\",\"chronosStep\":\"INSTRUCTIONS
\",\"facebookLoggedIn\":false,\"twitterLoggedIn\":false,\"fbServiceId
\":0,\"twServiceId\":0,\"unit\":1}"; Version=1; Max-Age=2592000; 
Expires=Sat, 04-Apr-2015 14:30:28 GMT
我可以看出这与第一页不同,因为
firstRow
被设置为
40

我正试图用以下代码获得Python 3中的第2页:

#!/usr/bin/env python
import urllib.request
opener = urllib.request.build_opener()
cookie = 'sportstats_preferences="{{\\"raceId\\":451,\\"firstRow\\":40,\\"category\\":\\"All Categories\\",\\"chronosStep\\":\\"INSTRUCTIONS\\",\\"facebookLoggedIn\\":false,\\"twitterLoggedIn\\":false,\\"fbServiceId\\":0,\\"twServiceId\\":0,\\"unit\\":1}}"; Version=1; Max-Age=2592000; Expires=Sat, 04-Apr-2015 04:18:36 GMT'
opener.addheaders = [('Cookie', cookie)]
f = opener.open(url).read().decode("utf-8")
for line in f.splitlines():
    print(line)

但这仍然只是返回第一页的结果。我这样做对吗?您知道如何获得第二页的结果吗?

您最好的选择可能是使用Selenium和相应的python包。Selenium允许您使用python打开并自动控制web浏览器。这将允许您与他们的下一页按钮交互,并在python脚本中读取结果


我还注意到,如果单击第二页并查看源代码,我仍然可以看到第一页的数据。但是如果我刷新页面,它会在源代码中显示第2页的结果。我尝试在我的代码中打开URL两次,但没有帮助。他们在页面中有一个视图状态(在
,请参阅页面源代码),我认为服务器使用该视图状态来决定显示哪个页面。感谢您的建议。这不是我希望听到的。Selenium看起来既沉重又复杂。@user3449833如果该网站实际为您提供了不同的检索地址或文本版本,显然会更容易。您可能会惊讶于使用Selenium控制firefox是多么容易。请看第二个链接中的示例。您所要做的就是告诉Selenium如果手动浏览,您将按哪些按钮。Selenium本身将根据您的python软件包命令控制firefox。我使用的是headless Linux,所以这没有帮助,但我将对此进行研究。谢谢我已经抓住了第一页,但我不知道如何“点击”。如果我使用:browser.find_element_by_id('mainForm:j_idt294')找到一个元素,那么如果我添加了。click(),它就会挂起。有什么想法吗?我不能在我的电脑上测试这些,但是在这里试试这个方法:-但是用你已经用的方法找到你的元素。