我正在使用Selenium WebDriver从许多网页中抓取信息。我想知道是否可以通过CSS选择器选择多个子元素。 HTML结构如下所示:
<section id="education">
<div class="degree">
<h3 class="school"> School1 </h3>
<p class="year"> 2002-2008 </p>
</div>
<div class="degree">
<h3 class="school"> School2 </h3>
</div>
</section>
在这种情况下,我想选择具有相应年份范围的学校名称。但如果我只是使用:
driver.find_elements_by_css_selector('section[id="education"] div[class="school"]')
driver.find_elements_by_css_selector('section[id="education"] p[class="year"]')
我会得到两个列表:[School1, School2]
和['2002-2008']
,我将无法确定哪个学校对应于年份范围'2002-2008'
。那么,是否可以将相应的学校名称和年份范围组合在一起?如果还有其他方法可以绕过它,它也会有所帮助。
答案 0 :(得分:3)
您必须遍历.degree
标记并成对提取所需的信息。以下是正常方法:
education = driver.find_element_by_id("education")
for degree in education.find_element_by_class_name("degree"):
school = degree.find_element_by_class_name("school")
year = degree.find_element_by_class_name("year")
print(school.text, year.text)
以下是使用CSS选择器的方法:
for degree in driver.find_elements_by_css_selector("#education .degree"):
school = degree.find_element_by_css_selector(".school")
year = degree.find_element_by_css_selector(".year")
print(school.text, year.text)
注意:正如@Andersson所评论的那样,如果使用{{3}中提到的方法之一可能遗漏了元素(.year
和.school
),则应该检查它们是否存在}。否则,此代码可能会抛出NoSuchElementException
。