【问题标题】:How can I scrape data from this table with Python?如何使用 Python 从该表中抓取数据?
【发布时间】:2022-01-10 05:51:45
【问题描述】:

不幸的是,我是网络抓取领域的绝对初学者,但我想在不久的将来集中处理它。我想用 Python 脚本将表格的数据保存在 Excel 文件中,这也不是问题。但是,该网站的源代码不包含我想要的任何值。检查时,值是在 HTML 结构中输入的,但是当我使用 XPath 时,输出的是不允许的,不允许的。如果我使用 Chrome 插件“DataMiner”,它可以读出值。我如何在 Python 中自己实现这一点?在图片中,显示了我要抓取的数据。不幸的是,这些数据不包含在源代码中。

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import requests

url = 'https://herakles.webuntis.com/WebUntis/monitor?school=Europaschule%20Gym%20Rhauderfehn&monitorType=subst&format=Test%20Sch%C3%BCler'

from selenium import webdriver


browser = webdriver.Chrome()
browser.get(url)
time.sleep(5)
htmlSource = browser.page_source
print(htmlSource)

更新:脚本现在打印出源代码,但是当通过 XPath 搜索元素时,它仍然没有显示任何内容。正如我已经说过的,我对 Python 和网络抓取完全陌生。

image

【问题讨论】:

  • 请包含更新中的更新代码,如果我们不知道您使用的是什么 xpath,我们无法判断您的 xpath 是否有问题

标签: python html web-scraping data-mining


【解决方案1】:

这是一个仅包含请求的版本。您可以从您的 devtools 网络选项卡获取有效负载数据

import requests

get_url="https://herakles.webuntis.com/WebUntis/monitor?school=Europaschule%20Gym%20Rhauderfehn&monitorType=subst&format=Test%20Sch%C3%BCler"
post_url="https://herakles.webuntis.com/WebUntis/monitor/substitution/data?school=Europaschule Gym Rhauderfehn"

payload={"formatName":"Test Schüler","schoolName":"Europaschule Gym Rhauderfehn","date":20211204,"dateOffset":0,"strikethrough":True,"mergeBlocks":True,"showOnlyFutureSub":True,"showBreakSupervisions":False,"showTeacher":True,"showClass":True,"showHour":True,"showInfo":True,"showRoom":True,"showSubject":True,"groupBy":1,"hideAbsent":True,"departmentIds":[],"departmentElementType":-1,"hideCancelWithSubstitution":True,"hideCancelCausedByEvent":False,"showTime":False,"showSubstText":True,"showAbsentElements":[],"showAffectedElements":[1],"showUnitTime":True,"showMessages":True,"showStudentgroup":False,"enableSubstitutionFrom":True,"showSubstitutionFrom":1600,"showTeacherOnEvent":False,"showAbsentTeacher":True,"strikethroughAbsentTeacher":True,"activityTypeIds":[2,3],"showEvent":True,"showCancel":True,"showOnlyCancel":False,"showSubstTypeColor":False,"showExamSupervision":False,"showUnheraldedExams":False}

with requests.session() as s:
    r=s.get(get_url)
    s.headers['Content-Type']="application/json;charset=UTF-8"
    r=s.post(post_url,json=payload)
    print(r.json())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多