我是一名学生,我正试图从我们的在线注册簿中抓取数据,以便Discord机器人可以在Discord上发送信息,该网站要求登录后我才能使用此代码进行操作:
import requests
from lxml import html
session_requests = requests.session()
login_url ="url"
result = session_requests.get(login_url)
payload = {
"txtUser": "user",
"txtPassword": "pass"}
tree = html.fromstring(result.text)
result = session_requests.post(
login_url,
data = payload,
headers = dict(referer=login_url)
)
但是随后当我开始抓取数据时,我遇到了一个问题:该网站仅使用一个URL,以便更好地进行说明,假设您是否需要从stackoverflow.com抓取数据,但地址栏中的URL始终只是stackoverflow。 com /,甚至当您访问网站的其他页面(例如询问问题或悬疑问题的页面)
时我不知道如何从类似的东西中检索数据
答案 0 :(得分:0)
如果该网站就像一个单页应用程序,我可以想到两种方法来尝试解决该问题:
选项1:尝试对网页调用的API进行反向工程。在Chrome中打开网站,然后打开开发者工具(CTRL+SHIFT+I)
,然后在网站上单击时查看“网络”标签。它应该向您显示该页面向其服务器发出的所有请求。根据它的复杂程度,这可能很容易理解,也可能是完全不可理解的。也许您可以找到www.school.edu/classinfo/1234之类的API端点,可以直接用于获取数据。使用Postman之类的工具,看看是否可以重新创建一些API调用。如果几分钟之内没有好的线索,请转到选项2。
选项2:查看诸如Selenium之类的浏览器自动化工具。 Selenium最常见的用途是对网站进行自动测试,但是您也可以将其与Python一起使用,以对网页执行操作,然后查询结果文档状态。 (例如:打开此网站;找到ID为“ studentid”的文本字段;在该字段中输入我的学生ID;找到ID为“ viewschedule”的按钮;单击它;找到ID为“ schedule”的div;返回该div内部的文本)。 selenium-python文档和一个不错的“ getting started”博客文章是一些不错的起点。当他们开始谈论测试框架时,您只需进行调整即可。