使用Python尝试访问受密码保护的网址

2024-10-02 14:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在访问时遇到问题www.bizi.si或者更具体地说 ^例如,{a1}。如果你不登记就看不到任何财务数据。但如果您使用免费注册,我使用用户名:Lukec,密码:luke12345,您可以看到一些财务数据。我使用了下一个代码:

import urllib.parse
import urllib.request
import re
import csv

username = 'Lukec'
password = 'lukec12345'
url = 'http://www.bizi.si/BALMAR-D-O-O/'
values = {'username':username, 'password':password}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')
req = urllib.request.Request(url,data,values)
resp = urllib.request.urlopen(req,data)
respData = resp.read()

paragraphs = re.findall('<tbody>(.*?)</tbody>',str(respData))

我的长度是零。如果你们中的任何人能告诉我如何正确访问页面,我将非常感激。我知道长度为零不是最好的指示器,如果我使用代码中所述的值或从代码中取出值,len(respData)也是相同的,所以我知道我没有通过用户名、密码访问页面。 提前谢谢你的帮助,祝你今天愉快。在


Tags: 代码importdatarequestwwwusernamepasswordurllib
1条回答
网友
1楼 · 发布于 2024-10-02 14:22:03

这里有两个问题:

  1. 您不是在使用POST,而是GET请求。在
  2. 在生成的HTML中没有<tbody>元素;任何这样的标记都是由浏览器自动添加的,不要依赖于它们的存在。在

要创建POST请求,请使用:

req = urllib.request.Request(url, data, method='POST')
resp = urllib.request.urlopen(req)

请注意,我删除了values参数(它们不是头,是Request()的第三个位置参数),并且在使用Request对象时,不会传入data参数。在

返回的结果HTML不一定包含发送到浏览器的相同数据;您可能需要维护一个会话,返回站点设置的cookies。在

使用更好的工具,如^{} libraryBeautifulSoup(后者允许您解析HTML而不必求助于正则表达式),它们可以与robobrowser project相结合,帮助您在网站上填写和提交表单。在

但是请注意,页面表单和状态由ASP.NETJavaScript代码,即使是robobrowser也不容易进行逆向工程。当您使用浏览器(它为您运行了JavaScript代码)登录时,帖子如下所示:

^{pr2}$

这比简单的用户名/密码组合要多得多。在

请参阅post request using python to asp.net page,了解如何处理此类页面。在

相关问题 更多 >