首页 > 解决方案 > 如何将一些数据输入网站并从 html 表中获取输出?

问题描述

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

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

标签: pythonweb-scrapingbeautifulsouppython-requests

解决方案


在按下提交按钮后,它会创建一个具有以下格式的 POST 请求:

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

registration number样品(11223101-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 和注册号,我自己成功测试了它。


推荐阅读