EDIT:感谢E Wiest解决了我的问题。您使用了一些我不熟悉的代码,因此给了我一些很好的学习资料。
原始帖子:我正在Python中使用Selenium来获取教育统计数据。我整天都在尝试从以下网站中提取一个数字-长期缺勤率-该网站包含美国伊利诺伊州的信息:https://www.illinoisreportcard.com/School.aspx?schoolid=340491250130001该数字(在本例中为“ 10%”)位于在带有“说明”类的div元素中。
<p class="image" id="thumb6" data-type="partition">
<svg class="canvas" width="256" height="220" viewBox="0 0 256 220">...</svg>==0
<div class="explanation" style="position: absolute; width: 110px; text-align: center; top: 82px; left: 73px;">10%</div>
</p>
我已经尝试了以下所有方法,包括显式等待,以选择包含该图形的div元素,但所有方法均失败,通常会导致NoSuchElementException:
driver.find_element_by_class_name('explanation')
driver.find_element_by_xpath("//div[@class='explanation']")
#Trying to reach parent element:
driver.find_element_by_xpath("//p[@id='thumb6']")
driver.find_element_by_xpath(/html[1]/body[1]/div[1]/div[1]/a[7]/p[1]/svg[1]/g[1]/rect[1])
我相信,但不确定,问题可能与动态内容有关,但是由于以前没有遇到过,我不确定HTML代码是否实际上是动态的。谁能帮助我理解为什么我无法提取图形?
谢谢。任何帮助,不胜感激。
我认为您不需要硒。首先,建立网址清单。模式是:
https://rcc.isbe.net/api/reportcardservice/(en)/Domain(school)/Id(340491250130001)/(Profile)/(2019)/Table/(Xml)
Id(340491250130001)
是每所学校的编号。(2019)
是感兴趣的年份。您可以根据需要指定年份范围(2016-2019)
。
对于列表中的每个URL,您需要获取包含数据的资源URL。 XPath:
//resourceUrl
您会得到类似的东西:
https://sec.isbe.net/iircapi/tempData/XML/File1992993354.xml
对于每个xml文件,您将获得::>的长期缺勤率。
//ChronicAbsenteeism
例如:
from lxml import html import requests data = requests.get('https://rcc.isbe.net/api/reportcardservice/(en)/Domain(school)/Id(340491250130001)/(Profile)/(2019)/Table/(Xml)') root = html.fromstring(data.content) xml=root.xpath('//resourceurl/text()')[0] source = requests.get(xml) tree = html.fromstring(source.content) print(tree.xpath('//chronicabsenteeism/text()')[0])
输出:
10
这里是快速解决方法: