Xpath和css_selectors无法提取动态内容。 (使用Python和Selenium)

问题描述 投票:0回答:2

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代码是否实际上是动态的。谁能帮助我理解为什么我无法提取图形?

谢谢。任何帮助,不胜感激。

python html selenium xpath css-selectors
2个回答
0
投票

我认为您不需要硒。首先,建立网址清单。模式是:

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


0
投票

这里是快速解决方法:

© www.soinside.com 2019 - 2024. All rights reserved.