2011-03-05 72 views
1

我想用Python連接到一個網站,但我不知道該怎麼做。Python幫助:登錄到網站

該網站的HTML看起來像這樣:

<form action="connexion.php" method="post"> 
    User<br /> 
    <input name="login_user" type="text" /> 
    <br /> 
    Password<br /> 
    <input name="pass_word" type="password" /> 
    <br /> 
    <input value="Connexion" type="submit" /> 
</form> 

好吧,我會盡量解釋更好......

這裏是連接到pun_bb論壇腳本:

import urllib 
import string 

host = "http://punbbforum.example.com" 
username = "userxxx" 
password = "passwww" 
params = { 
    'req_username' : username, 
    'req_password' : password, 
    'form_sent' : 1 
    } 

wclient = urllib.URLopener() 

req = wclient.open(host + "/login.php?action=in", urllib.urlencode(params)) 
info = req.info() 

if 'set-cookie' not in info: 
    sys.exit(-3) 

cookie = info['set-cookie'] 

cookie = cookie[:string.find(cookie, ';')] 
wclient.addheader('Cookie', cookie); 

req = wclient.open("http://punbbforum.example.com/post.php?fid=15") 
print req.read() 

但它只適用於punbb網站...我想創建一個腳本,它將與此示例一起工作...

謝謝

+1

你是什麼意思?你的意思是使用python進行服務器端腳本?你想使用python發佈到'connexion.php'嗎? – 2011-03-05 12:43:40

+0

我想訪問我的會員數據,但爲此,我必須輸入我的登錄數據。在這裏,通過python。 – Misterx3 2011-03-05 13:00:15

回答

1

您可以使用urllib模塊打開任何網站並獲取其HTML代碼。但是如果你想使用python從你的HTML表單接收數據,你應該學習一個Web框架,比如:Django,webpy或者Flask。

編輯:您應該將「req_username」替換爲「login_user」,將「req_password」替換爲「pass_word」。

+0

我只想通過python訪問成員數據。 與論壇punbb,我可以做到這一點,但它不適用於其他的HTML。 – Misterx3 2011-03-05 12:56:14

+0

請編輯你的問題,並解釋如何做到這一點與論壇punbb澄清你的問題! – 2011-03-05 13:03:50

+0

如果此論壇是您的,您可以使用elixir並訪問SQL數據庫。那麼你可以得到任何成員的數據! – 2011-03-05 13:05:40

1

我認爲mechanize模塊是你需要的。它的目的是作爲一個人與瀏覽器會 - 讓你「點擊」鏈接,提交表單,登錄到網站等。

1

我用這個PyQt。該窗口有一個瀏覽器小部件,用於加載網頁。之後,如果填寫需要的字段(用戶名和密碼)並提交表單。 我認爲這個解決方案比簡單表單提交的好處是它可以與Javascript頁面一起工作,並且在頁面加載後對頁面進行更改。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
url = "http://192.168.173.66:8080" 
username = "c58941376" 
password = "7758" 

import sys, signal 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 

def JSEval(code): 
    return webpage.mainFrame().evaluateJavaScript(code) 

def onLoadStarted(): 
    print "Loading started: %s" % webpage.mainFrame().url().toString() 

def onLoadFinished(result): 
    print "Loading finished: %s" % webpage.mainFrame().url().toString() 
    if not result: 
     #print "Request failed" 
     return 

    JSEval("_form = document.getElementsByName('authenticateForm')[0];") 
    if JSEval("_form.tagName").toString() != "FORM" : 
     print "Couldn't find needed form. Not a login page (wrong address or already logged in)." 
     return 
    JSEval("_form.username.value='%s';" % username \ 
     + "_form.password.value='%s';" % password \ 
     + "_form.submit();") 
    print "Login data sent" 


app = QApplication(sys.argv) 
signal.signal(signal.SIGINT, signal.SIG_DFL) 

webpage = QWebPage() 
webpage.connect(webpage, SIGNAL("loadFinished(bool)"), onLoadFinished) 
webpage.connect(webpage, SIGNAL("loadStarted()"), onLoadStarted) 
webpage.mainFrame().load(QUrl(url)) 

web = QWebView() 
web.setPage(webpage) 
web.show() 

sys.exit(app.exec_())