2012-04-16 4 views
1

대학 프로젝트를위한 몇 개의 웹 사이트를 크롤링해야하며 로그인이 필요한 사이트의 막 다른 골목에 처했습니다. urllib, urllib2, cookielib 모듈을 Python으로 사용하여 로그인했습니다. http://www.cafemom.com에는 작동하지 않습니다. 수신 한 http 응답이 .txt 파일에 저장되며 '로그인 실패'페이지에 해당합니다.파이썬을 사용하여 웹 사이트에 로그인하는 데 도움이 필요합니다.

나는 또한이 목적을 위해 "능 직물"패키지를 사용해 보았는데, 저도 잘 맞지 않았습니다. 누구든지 제가해야 할 일을 제안 할 수 있습니까?

다음은이 목적으로 사용한 주요 login() 메소드입니다.

def urlopen(req): 
    try: 
      r = urllib2.urlopen(req) 
    except IOError, e: 
      if hasattr(e, 'code'): 
        print 'The server couldn\'t fulfill the request.' 
        print 'Error code: ', e.code 
      elif hasattr(e, 'reason'): 
        print 'We failed to reach a server.' 
        print 'Reason: ', e.reason 
      raise 

    return r 

class Cafemom: 
    """Communication with Cafemom""" 

    def __init__(self, cookieFile = 'cookie.jar', debug = 0): 
      self.cookieFile = cookieFile 
      self.debug = debug 
      self.loggedIn = 0 
      self.uid = '' 
      self.email = '' 
      self.passwd = '' 
      self.cj = cookielib.LWPCookieJar() 

      if os.path.isfile(cookieFile): 
        self.cj.load(cookieFile) 

      opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj)) 
      urllib2.install_opener(opener) 

    def __del__(self): 
      self.cj.save(self.cookieFile) 

    def login(self, email, password): 
      """Logging in Cafemom""" 

      self.email = email 
      self.passwd = password 
      url='http://www.cafemom.com/lohin.php?' 
      cnt='http://www.cafemom.com' 
      headers = {'Content-Type': 'application/x-www-form-urlencoded'} 
      body = {'identifier': email, 'password': password } 
      if self.debug == 1: 
        print "Logging in..." 

      req = urllib2.Request(url, urllib.urlencode(body), headers) 
      print urllib.urlencode(body) 
      #print req.group() 
      handle = urlopen(req) 

      h = handle.read() 
      f = open("responseCafemom.txt","w") 
      f.write(f) 
      f.close() 

나는이 코드를 사용하여 시도 및

import urllib, urllib2, cookielib 

username = myusername 
password = mypassword 

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

"login.php"SpEL을의 응답을 읽는 방법입니다 잘못했다 - "lohin.php". 또한 http://cl.ly/272Q2o2q3P2p1g1B1K44를 확인하십시오 - '식별자'및 '암호'보다 많은 필드가 있음을 유의하십시오. –

답변

1

내가이 정확하게 당신이 필요로하는 경우 확실하지 않다 실패했다,하지만 파이썬에 대한 try.The 우수한 requests 모듈을 모두 지원 가치 쿠키 및 HTTP 기본 인증.

이 예제는 해당 문서에서 직접 확인할 수 있습니다. 여기

은 기본 인증 예

payload = {'identifer': email, 'password': password} 
r = requests.post("http://www.cafemom.com/login.php?", data=payload) 
다음

은 "r.cookies".Cookie 저장 단지 사전입니다 함께 이전 요청에서 액세스 할 수 있습니다 이전에 저장된 쿠키를 (전달하는 방법이다.

여기
r = requests.get(url, cookies=cookies) 

귀하의 요청

당신은이
f = open("responseCafemom.txt","w") 
f.write(r.text) 
+0

도움 주셔서 감사합니다. – user1246197