Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的HTML解析和自动身份验证_Python_Html_Parsing_Authentication_Python Requests - Fatal编程技术网

Python中的HTML解析和自动身份验证

Python中的HTML解析和自动身份验证,python,html,parsing,authentication,python-requests,Python,Html,Parsing,Authentication,Python Requests,我正在尝试编写一个Python脚本,该脚本将自动对用户进行身份验证,以便解析站点并最终输出相关数据。我似乎无法解决自动身份验证问题,这可能就是解析无法进行的原因。一个问题是,我们尝试登录的站点没有更改,并且始终是相同的IP。我们也没有在这个网页的第18行使用提交,所以我们不确定如何进行修改,使其符合需要 from lxml import html import requests import sys USER = '' PASS = '' URL = '' def main(): # St

我正在尝试编写一个Python脚本,该脚本将自动对用户进行身份验证,以便解析站点并最终输出相关数据。我似乎无法解决自动身份验证问题,这可能就是解析无法进行的原因。一个问题是,我们尝试登录的站点没有更改,并且始终是相同的IP。我们也没有在这个网页的第18行使用提交,所以我们不确定如何进行修改,使其符合需要

from lxml import html
import requests
import sys

USER = ''
PASS = ''

URL = ''

def main():
# Start a session so we can have persistant cookies
session = requests.session(config={'verbose': sys.stderr})

# This is the form data that the page sends when logging in
login_data = {
    'InputPanel': USER,
    'InputPassword': PASS,
    'submit': 'login',
}

# Authenticate
r = session.post(URL, data=login_data)

# Try accessing a page that requires you to be logged in
r = session.get('')

if __name__ == '__main__':
main()

go('')

fv("1", "InputPanel", "")
fv("1", "InputPassword", "")

submit('0')

page = requests.get('')
tree = html.fromstring(page.text)

#Hours
hours = tree.xpath('//div[@class="staticObject"]/text()')
#Machine
projectors = tree.xpath('//div[@class1="corners dynamicObject"]/text()')

print 'Hours: ', hours
print 'Projectors: ', projectors
在Python中搜索身份验证并找到了一些结果,但似乎没有多少结果适用于我。我现在的代码来自我发现的一个示例,正如您在第25行中看到的,没有登录我们就无法访问任何页面,因为URL保持不变


任何帮助都很好。

没有更多信息,这很难回答。您可以直接使用

response = urllib2.urlopen(url) 
对于登录和捕获它输出的会话,如果它是一个头/cookie,您可以捕获它们并在会话的其余部分使用它们,但您可能必须为每个页面请求传递它们。在你的问题中没有足够的信息来给你一个全面深入的答案


如果您正在解析html,您可能想看看

您是否尝试了python中的mechanize模块


它在调整提交按钮和表单时非常方便。

现在我也在处理身份验证。我为你简化了这个部分。它实际上是一门课的一部分

def func1(self):
    """
    Authentication
    Parameters: none
    """
    USER = 'username'
    PASS = 'password'
    URL = 'http://[ip]'
    payload = {"InputPanel": USER,
               "InputPassword": PASS,
               "submit": "login"}

    response = requests.post(self.URL, data=payload, verify=True)
    if response.status_code is not 200:
        raise AuthError(response.reason)
    auth_info = response.json()
    return auth_info

我不知道这是否能正常工作,因为我重新编码并删除了很多代码。您可能需要一些导入请求,json。此外,由于您没有此类,AuthError将给您一个错误-您可以对行..if和..auth_info进行注释,因此它将不会执行。

您应该提供其他信息。我发现go和fv被一种叫做twill的Python API所使用。对此我很抱歉。我粘贴了一个旧的代码。我加了进口斜纹布,这还不够。这个问题太宽泛了,因为您正在Python的整个领域中讨论HTTP身份验证的整个概念。此外,您似乎在问一个关于特定框架的问题,而没有这样标记,也没有真正深入了解您试图用它做什么。试着将问题缩小到实际问题的范围,减少正确缩进的行数!密码文本太多,上下文不够。@MikeEMKI会话变量/cookies等将出现在requests.session上,因此fv/go/submit将不会出现这种情况。这就像使用一个浏览器登录、验证,然后切换到另一个浏览器-而不是登录,并想知道为什么它不起作用。。。您可以删除twill并使用requests.post来填写所需的表单吗?只需将其发布到表单目标并包含与验证部分相同的值。我将继续删除twill部分并从中排除故障。谢谢。我看过bs4,但再看一眼也无妨。谢谢。Twill是机械化模块的包装:哦。。我懂了。我还没试过。但我想,我们在网页上有更多的控制与机械化比斜纹布。不是吗?