2011-03-05 91 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_())