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

"http:..."文字列と urlencoded データの間にコンマを使用するのはどう[logindata]ですか?

于 2008-11-26T16:27:39.090 に答える
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

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 に答える