Python 如何使用xpath和selenium在两个h标记之间选择元素
我正在努力刮这个 但是看到它的元素,我对如何提取位于两个h3标签之间的数据感到困惑。h3标记元素包含国家名称。在下一个h3标签(使用另一个国家名称)之前,有些帖子包含截止日期文本和与该截止日期相关的文件链接。事实上,它们中的每一个都是针对该国发布的商业投标机会 检查元件: 获取数据后,我就是这样将数据存储到数据库中的。 请注意,我们无法预测未来h3元素中可能出现的国家名称和拼写,但我们绝不希望错过网站上新发布的任何机会 有谁能帮助我使用XPath或selenium解决方案吗。非常感谢你的帮助。Python 如何使用xpath和selenium在两个h标记之间选择元素,python,selenium-webdriver,xpath,css-selectors,webdriverwait,Python,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,我正在努力刮这个 但是看到它的元素,我对如何提取位于两个h3标签之间的数据感到困惑。h3标记元素包含国家名称。在下一个h3标签(使用另一个国家名称)之前,有些帖子包含截止日期文本和与该截止日期相关的文件链接。事实上,它们中的每一个都是针对该国发布的商业投标机会 检查元件: 获取数据后,我就是这样将数据存储到数据库中的。 请注意,我们无法预测未来h3元素中可能出现的国家名称和拼写,但我们绝不希望错过网站上新发布的任何机会 有谁能帮助我使用XPath或selenium解决方案吗。非常感谢你的帮
在过去的几个小时里,我一直在想办法,但没能想出任何好主意。提前感谢您使用从所有
中提取和打印文本,例如Sahel-Sécuritéet Etat de Droit&Santéet Droits Sexuels et Reproductifs-OKP-SHL-20047(210.78 kB)(法语)等,您可以使用以下任一选项:
- 使用
:css\u选择器
driver.get("https://www.nuffic.nl/en/subjects/orange-knowledge-programme/calls-group-training-maximum-24-months-tmt-plus-orange") print([my_elem.text for my_elem in driver.find_elements_by_css_selector("h4 +p")])
- 使用
:xpath
driver.get("https://www.nuffic.nl/en/subjects/orange-knowledge-programme/calls-group-training-maximum-24-months-tmt-plus-orange") print([my_elem.text for my_elem in driver.find_elements_by_xpath("//h4//following::p[1]")])
理想情况下,您需要引导所有元素的可见性(),您可以使用以下任一项:
- 使用
:CSS\u选择器
driver.get("https://www.nuffic.nl/en/subjects/orange-knowledge-programme/calls-group-training-maximum-24-months-tmt-plus-orange") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "h4 +p")))])
- 使用
:XPATH
driver.get("https://www.nuffic.nl/en/subjects/orange-knowledge-programme/calls-group-training-maximum-24-months-tmt-plus-orange") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//h4//following::p[1]")))])
- 控制台输出:
['Sahel - Sécurité et Etat de Droit & Santé et Droits Sexuels et Reproductifs - OKP-SHL-20047 (210.78 kB) (in French)', 'Sahel - Santé et Droits Sexuels et Reproductifs - OKP-SHL-20048 (193.91 kB) (in French)', 'Sahel - Sécurité et Etat de Droit - OKP-SHL-20049 (209.17 kB) (in French)', 'Capacity strengthening for Resilience in the Sahel\u200c (365.57 kB)', 'Tunesia - Sécurité, Stabilité et Migration - OKP-TUN-40014 (209.87 kB) (in French)', 'Tunisia - Country Plan of Implementation - Orange Knowledge (423.8 kB)', 'Nigeria - Food and Nutrition Security - OKP-NIG-20050 (211.74 kB)', 'Sub-Sahara Africa - Health - OKP-SSA-50002 (214.27 kB)', 'Health Systems Strengthening through education and training – In Burkina Faso, Burundi, Ethiopia, Mali, Niger (301.71 kB)', 'Benin - Santé et Droits Sexuels et Reproductifs - OKP-BEN-20053 (189.51 kB) (in French)', 'Benin - Country Plan of Implementation - Orange Knowledge (in French)', 'Indonesia - Security and the Rule of Law - OKP-IDN-20055 (204.89 kB)', 'Indonesia - Food and Nutrition Security, Water - OKP-IDN-20056 (202.17 kB)', 'Indonesia - Country Plan of Implementation - Orange Knowledge (613.86 kB)', 'Horn of Africa – Food and Nutrition Security, Security and Rule of Law - OKP-EAR-20058 (236.34 kB)', 'Capacity strengthening for Resilience in the Horn of Africa (252.64 kB)\u200c', 'Thematic call SRHR - OKP-SRHR-40015 (235.72 kB)']
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
container = driver.find_element_by_xpath('//div[h3 and h4]')
headers = container.find_elements_by_xpath('./h3')
data = []
for index, _header in enumerate(headers):
header = _header.text
_deadlines = container.find_elements_by_xpath('./h3[position()={}]/following-sibling::h4[starts-with(., "Deadline") and not(preceding-sibling::h3[position()={}])]'.format(index + 1, index + 2))
_data = []
for _deadline in _deadlines:
link = _deadline.find_element_by_xpath('./following-sibling::p[1]//a').get_attribute('href')
_data.append({_deadline.text: link})
data.append([header, _data])
for item in data:
print(item)
注意:这允许在每个截止日期只获取第一个链接(即使有多个链接)如何选择位于两个h3标记之间的所有h4,将HTML Dom代码张贴在屏幕截图上。我们如何调试xpath?您好@MohamedSulaimaanSheriff您是对的,如果有人试图检查,我会提供链接。谢谢你感谢你一直在那里帮助我。但解决方案只获得链接的标题。它错过了每一个的截止日期和href值。你也能帮我吗。假设[[sahel-xxxxxx,1月26日,www.axxxx.pdf][……]]谢谢。但如果有可能获得所有链接,请帮助我解决。@TalibDaryabi我无法找到有效的方法。这个问题可能需要单独的问题,非常感谢