Python中的HTML解析和自动身份验证
我正在尝试编写一个Python脚本,该脚本将自动对用户进行身份验证,以便解析站点并最终输出相关数据。我似乎无法解决自动身份验证问题,这可能就是解析无法进行的原因。一个问题是,我们尝试登录的站点没有更改,并且始终是相同的IP。我们也没有在这个网页的第18行使用提交,所以我们不确定如何进行修改,使其符合需要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
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是机械化模块的包装:哦。。我懂了。我还没试过。但我想,我们在网页上有更多的控制与机械化比斜纹布。不是吗?