파이썬을 사용하여 웹 페이지에 로그인하고 나중에 사용하기 위해 쿠키를 검색하는 방법은 무엇입니까?


146

파이썬을 사용하여 웹 페이지를 다운로드하고 구문 분석하고 싶지만 액세스하려면 몇 가지 쿠키 세트가 필요합니다. 따라서 먼저 https를 통해 웹 페이지에 로그인해야합니다. 로그인 순간에는 두 개의 POST 매개 변수 (사용자 이름, 비밀번호)를 /login.php로 보내는 것이 포함됩니다. 로그인 요청 중에 응답 헤더에서 쿠키를 검색하여 저장하여 요청에 쿠키를 사용하여 웹 페이지 /data.php를 다운로드하려고합니다.

파이썬 (어떻게 2.6) 에서이 작업을 수행합니까? 가능하면 내장 모듈 만 사용하고 싶습니다.

답변:


147
import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read()는 열려고하는 페이지의 html이며 opener세션 쿠키를 사용하여 모든 페이지를 보는 데 사용할 수 있습니다 .


1
안전한가요? 이렇게하면 패킷 스니퍼가 일반 텍스트 비밀번호를 볼 수 없습니까? Https를 사용하는 것이 더 안전합니까?
Heartinpiece

2
@Heartinpiece 예, 서버에서 제공하는 경우 HTTPS를 사용해야합니다.
Harley Holcombe

감사합니다 ...하지만 우리가 로그인하고 sth를 게시하고 싶다고 상상하십시오 ...이 스레드에서 게시 데이터를 위해 coockie를 설정하는 방법은 무엇입니까?
MLSC

큰 코드를 작성하는 경우 요청 라이브러리를 사용하는 것이 좋습니다. (개인 경험)
swapnil jariwala

157

우수한 요청 라이브러리를 사용하는 버전은 다음과 같습니다 .

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)

3
'action': 'login'이 예제에서 실제로 필요 합니까 , 아니면 요청과 함께 전송되는 추가 매개 변수입니까?
Ted

1
@ 테드 그 부분은 완전히 필요합니다.
이상현

@Ted 어쩌면이 특정 예에서 필요할 수 있습니다. 내 프로그램에는 필요하지 않았습니다.
Highstaker

이것이 내가 아는 최고입니다. 웹 사이트별로 데이터를 작성해야 할 수도 있습니다.
Jithin Pavithran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.