3

我写这个是为了尝试登录一个论坛(phpBB3)。

import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
output = page.read()

但是,当我运行它时,它会出现;

Traceback (most recent call last):
  File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
    page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
TypeError: string indices must be integers

关于如何解决这个问题的任何想法?

编辑

在字符串和数据之间添加逗号会产生此错误

Traceback (most recent call last):
  File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
    page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login",[logindata])
  File "C:\Python25\lib\urllib.py", line 84, in urlopen
    return opener.open(url, data)
  File "C:\Python25\lib\urllib.py", line 192, in open
    return getattr(self, name)(url, data)
  File "C:\Python25\lib\urllib.py", line 327, in open_http
    h.send(data)
  File "C:\Python25\lib\httplib.py", line 711, in send
    self.sock.sendall(str)
  File "<string>", line 1, in sendall
TypeError: sendall() argument 1 must be string or read-only buffer, not list

编辑2

我已将代码从原来的样子更改为;

import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)
output = page.read()

这不会引发任何错误消息,它只会给出 3 个空白行。这是因为我试图从登录后消失的登录页面中读取数据。如果是这样,我如何让它显示在点击登录后应该出现的索引。

4

5 回答 5

5

你的线

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])

是语义上无效的 Python。大概你的意思是

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login", [logindata])

其中有一个逗号分隔参数。然而,你真正想要的只是

page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)

不尝试将 logindata 包含在列表中并使用 urlopen 的更新版本是 urllib2 库。

于 2008-11-26T16:29:19.573 回答
1

您的 URL 字符串不应该是

"http://www.woarl.com/board/ucp.php?mode=login"[logindata]

 "http://www.woarl.com/board/ucp.php?mode=login", logindata

我认为,因为 [] 用于数组并且它需要一个整数。我可能是错的,因为我没有做过很多 Python。

于 2008-11-26T16:27:31.323 回答
1

"http:..."在字符串和 urlencoded 数据之间使用逗号怎么样[logindata]

于 2008-11-26T16:27:39.090 回答
1

如果你在 logindata 上做一个类型,你可以看到它是一个字符串:

>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>

将它放在方括号 ([]) 中会将其置于列表上下文中,这不是您想要的。

于 2008-11-26T16:33:59.530 回答
-1

使用高级“机械化”模块会更容易。

于 2008-11-27T01:41:36.087 回答