我让breen尝试学习在Python中使用urllib2包。我试着以学生的身份(左边的表格)登录到数学学生的注册页面:http://reg.maths.lth.se/。我已经检查了代码(使用Firebug),左边的表单显然应该使用POST来调用,键名为pnr
,其值应该是一个10个字符长的字符串(最后一部分可能在HTML代码中看不到,但它基本上是我的社会保险号,所以我知道它应该有多长)。注意,适当的POST方法的头中的action
是另一个URL,即http://reg.maths.lth.se/login/student。在
我尝试过(在下面的例子中使用了一个假的pnr
,但是我在自己的代码中使用了我的实数)。在
import urllib
import urllib2
url = 'http://reg.maths.lth.se/'
values = dict(pnr='0000000000')
data = urllib.urlencode(values)
req = urllib2.Request(url,data)
resp = urllib2.urlopen(req)
page = resp.read()
print page
在执行此操作时,打印的是原始页面http://reg.maths.lth.se/的源代码,因此似乎我没有登录。另外,我可以在values字典中添加任何键/值对,它不会产生任何错误,这在我看来很奇怪。在
另外,如果我转到页面http://reg.maths.lth.se/login/student,显然没有提交数据的POST方法。在
有什么建议吗?在
如果您在输入数字并提交表单时检查发送到服务器的请求是什么,您会注意到它是一个带有
pnr
和_token
参数的POST请求:您缺少需要从页面的HTML源中提取的
_token
参数。它是一个隐藏的input
元素:我建议研究一下像^{} 、^{} 或^{} 这样的工具可以简化表单提交。您也可以使用HTML解析器来解析HTML,比如} 发送:
^{pr2}$BeautifulSoup
,提取令牌并通过urllib2
或^{相关问题 更多 >
编程相关推荐