1

大学のプロジェクトでいくつかの Web サイトをクロールする必要がありますが、ログインが必要なサイトで行き止まりになりました。Python で urllib,urllib2,cookielib モジュールを使用してログインしています。 http://www.cafemom.comでは機能しません。受信した http 応答は .txt ファイルに保存され、「失敗したログイン」ページに対応しています。

また、この目的のためにパッケージ「twill」を使用しようとしましたが、これもうまくいきませんでした。誰が私が何をすべきかを提案できますか?

以下は、この目的で使用したメインの 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()
4

1 に答える 1

1

これがまさにあなたが必要としているものかどうかはわかりませんが、試してみる価値はあります。Python の優れたリクエストモジュールは、Cookie と HTTP 基本認証の両方をサポートしています。

これらの例は、ドキュメントから直接引用しています。

これが基本的な認証の例です

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

以前に保存した Cookie を渡す方法は次のとおりです (「r.cookies」を使用して以前の要求からアクセスできます)。Cookie ストアは単なる辞書です。

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

リクエストのレスポンスを読む方法は次のとおりです。

f = open("responseCafemom.txt","w")
f.write(r.text)
于 2012-04-16T01:56:02.783 に答える