如何在网站中输入一些数据并从html表中获取输出?

时间:2019-06-02 10:44:56

标签: python web-scraping beautifulsoup python-requests

因此,最近我一直在尝试从成绩网站(http://tnresults.nic.in/rgnfs.htm)上获得我的学校成绩的分数。...我的朋友向我挑战以获取他的分数,而我只知道他的DOB和不是他的寄存器号。如何通过尝试输入预定义范围内的寄存器号(我知道他的DOB,顺便说一句)来制作Python程序来解决这个问题?

我尝试使用请求,但是不允许我输入寄存器和DOB。

1 个答案:

答案 0 :(得分:0)

按下“提交”按钮后,它将以以下格式创建POST请求:

https://dge3.tn.nic.in/plusone/plusoneapi/marks/{registration number}/{DOB}

样本(其中112231作为registration number01-01-2000作为DOB。

https://dge3.tn.nic.in/plusone/plusoneapi/marks/112231/01-01-2000

然后可以使用预定义的数组遍历不同的注册号。
注意:它必须是POST请求,而不是常规的GET请求。

您可能必须执行以下操作:

import requests
from bs4 import BeautifulSoup

DOB = '01-01-2000'
REGISTRATION_NUMBERS = ['1','2']

for reg_number in REGISTRATION_NUMBERS:
    result = requests.post(f"https://dge3.tn.nic.in/plusone/plusoneapi/marks/{reg_number}/{DOB}")

    content = result.content
    print(content)
    ## BeautifulSoup logic

我不知道该请求是否能为您提供所需的信息,我没有有效的注册号和正确的出生日期,所以我无法真正对其进行测试...

更新2019-07-09:
既然您说该页面无法正常工作并且网站已更改,那么我来看看。 似乎有些事情已经改变,您现在必须向http://tnresults.nic.in/rgnfs.asp发出发布请求。字段“ regno”,“ dob”和“ B1”(可选?)应以x-www-form-urlencoded发送。

由于将返回“拒绝访问”,因此应将“ Referer”标头设置为“ http://tnresults.nic.in/rgnfs.htm”。所以:

import requests
from bs4 import BeautifulSoup

DOB = '23-10-2002'
REGISTRATION_NUMBERS = ['5709360']

headers = requests.utils.default_headers()
headers.update({'Referer': 'http://tnresults.nic.in/rgnfs.htm'})

for reg_number in REGISTRATION_NUMBERS:
    post_data = {'regno': reg_number, 'dob': DOB}
    result = requests.post(f"http://tnresults.nic.in/rgnfs.asp", data=post_data, headers=headers)

    content = result.content
    print(content)
    ## BeautifulSoup logic

现在您已经提供了有效的DOB和注册号,就可以成功地自己进行了测试。