문제
포럼 (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
edit2
나는 코드를 그것이 무엇으로 바꾸 었는지를 변경했다.
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 개의 빈 줄만 제공합니다. 로그인 후 사라지는 로그인 페이지에서 읽으려고하기 때문입니다. 그렇다면 로그인을 누른 후 나타나야하는 인덱스를 표시해야합니다.
해결책
당신의 라인
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
의미 적으로 유효하지 않은 파이썬입니다. 아마도 당신은 의미합니다
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 라이브러리가 있습니다.
다른 팁
문자열 사이에 쉼표를 사용하는 것은 어떻습니까?"http:..."
그리고 urlencoded 데이터, [logindata]
?
URL 문자열은 아니어야합니다
"http://www.woarl.com/board/ucp.php?mode=login"[logindata]
하지만
"http://www.woarl.com/board/ucp.php?mode=login", logindata
]는 배열을위한 것이고 정수가 필요하기 때문에 생각합니다. 나는 많은 파이썬을하지 않았기 때문에 틀렸을 수도 있습니다.
logindata에서 유형을 수행하면 문자열임을 알 수 있습니다.
>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>
괄호 ([])에 넣으면 목록 컨텍스트에 넣습니다.
높은 수준의 "기계화"모듈에서는 더 쉬울 것입니다.
제휴하지 않습니다 StackOverflow