如何从仅使用一个网址的网站上抓取数据

时间:2020-09-08 14:47:43

标签: python-3.x web-scraping python-requests lxml

我是一名学生,我正试图从我们的在线注册簿中抓取数据,以便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 /,甚至当您访问网站的其他页面(例如询问问题或悬疑问题的页面)

我不知道如何从类似的东西中检索数据

1 个答案:

答案 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”博客文章是一些不错的起点。当他们开始谈论测试框架时,您只需进行调整即可。

相关问题