python - 如何仅在输入数据后从网站中提取表格数据?
问题描述
有一个不接受查询(隐藏)的网站,有一个带有 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
`
解决方案
我假设您指的是“了解您的班级和部分”。这是一种形式。这是一个带有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
推荐阅读
- xpath - 比较 XSLT 代码中的日期时出现无效日期问题
- azure - 机器学习工作室的网络服务是公开的吗?
- javascript - jquery如何改变div的值
- python - django上多个应用程序项目的静态文件夹问题
- python - Django 在创建时自动将数据加载到数据库表中
- f# - 在 F# 中,当字符串具有一些轻量级降价属性时,如何按块拆分字符串列表?
- javascript - 将带有 jquery 的 html 模板转换为 React js
- eslint - 苗条与漂亮/eslint
- javascript - NodeJS require() 无法访问模块并且不返回任何函数
- vba - VBA 舍入函数,存储其值以供以后使用,收到“溢出”错误消息