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

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

编辑: 感谢E Wiest解决了我的问题。你用了一些我不熟悉的代码,所以你给了我一些很好的学习材料。

原帖: 我正在使用Python中的Selenium来抓取教育统计数据。我花了一整天的时间试图从以下网站中提取一个数字 -- -- 长期旷课率,该网站包含美国伊利诺伊州的信息。https:/www.illinoisreportcard.comSchool.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
1个回答
0
投票

我认为你不需要Selenium来做这件事。首先,建立一个urls的列表。这个模式是:

https://rcc.isbe.net/api/reportcardservice/(en)/Domain(school)/Id(340491250130001)/(Profile)/(2019)/Table/(Xml)

哪儿 Id(340491250130001) 是每个学校的id。(2019) 是感兴趣的年份。你可以指定一个范围的年份 (2016-2019) 如果你愿意的话。

对于你的列表中的每个URL,你需要获得包含数据的ressource 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
投票

这里有一个快速解决方法。

driver.find_element_by_xpath("//div[@class='explanation']").text() # This will fetch the innerHTML i.e. value of the div
© www.soinside.com 2019 - 2024. All rights reserved.