首页 > 解决方案 > 如何仅在输入数据后从网站中提取表格数据?

问题描述

有一个不接受查询(隐藏)的网站,有一个带有 html id 的输入字段,一旦你输入值并单击提交,你就会得到一个单行表。

是否可以在循环中输入输入值并使用 python 和 beautifulsoup 或 flask 通过网络抓取来获取表数据?(不是硒)

关联

点击了解你的班级和部分

`import requests
import urllib.request
import time
from bs4 import BeautifulSoup

# Set the URL you want to webscrape from
url = 'https://www.pesuacademy.com/Academy'
page = requests.get(url)

soup = BeautifulSoup(page.content, 'html.parser')
#results = soup.find(id = "knowClsSectionModalLoginId")
#R = soup.find(id = 'knowClsSectionModalTableDate')
try:
  a = soup.find('input', {'id':'knowClsSectionModalLoginId'}).get('value')
  for i in a:
    inputv = i.get('value')
    print(i, \n)

except:
  pass
`

标签: pythonhtmlwebflaskbeautifulsoup

解决方案


我假设您指的是“了解您的班级和部分”。这是一种形式。这是一个带有loginid.

您可以提供 list 中的所有 id loginids。该脚本循环并获取所有数据并保存到 csv 文件。

import requests
from bs4 import BeautifulSoup
import pandas as pd

loginids = ["PES1201900004"]

payload = {
    "loginId": ""
}

headers = {
    "content-type": "application/x-www-form-urlencoded"
}
url = "https://pesuacademy.com/Academy/getStudentClassInfo"

columns = ['PRN', 'SRN', 'Name', 'Class', 'Section', 'Cycle', 'Department', 'Branch', 'Institute Name']

data = []

for logins in loginids:
    payload["loginId"] = logins

    res = requests.post(url, data=payload,headers=headers)
    soup = BeautifulSoup(res.text, "html.parser")
    data.append([i.get_text(strip=True) for i in soup.find("table").find("tbody").find_all("td")])

df = pd.DataFrame(data, columns=columns)
df.to_csv("data.csv", index=False)
print(df)

输出:

             PRN SRN            Name Class Section Cycle Department  Branch Institute Name
0  PES1201900004  NA  AKSHAYA RAMESH                  NA             B ARCH

推荐阅读