用xpath解析另外两个不同的类

时间:2018-01-03 21:03:40

标签: python xpath

我正在尝试使用xpath解析以下html来检索lsTime和lsTmames,以显示为:

21:30
Benfica
Sporting

请注意,html有更多数据,因此我将使用循环。

HTML:

<li class="">
                            <dl class="lsTime"><dd>21:30</dd></dl>
                            <dl class="lsTNames">
                                <dd>Benfica</dd>
                                <dd>Sporting CP</dd>
                            </dl>
                            <dl class="lsScore">
                                <dd></dd>
                                <dd></dd>
                            </dl>
                        </li>

我的代码:

            with Display():
                browser = webdriver.Firefox()
                try:
                   browser.get(url_link_mob)
                   time.sleep(2)
                   for litag in browser.find_elements_by_xpath('//dl[@class="lsTime"]'):
                       time= litag.text
                       print(time)
for litag2 in browser.find_elements_by_xpath('//dl[@class="lsTNames"]'):
                       clubs= litag2.text
                       print(clubs)    
                finally:
                    browser.quit()

如果我使用上面的代码,数据将不会按我的要求显示,因为所有游戏的时间将与俱乐部分开。在我的例子中,我怎么能首先解析每个游戏的时间和俱乐部? 谢谢。

2 个答案:

答案 0 :(得分:0)

我打算用伪代码回复。 TUGA!

//cicle all dl elements
for litag in browser.find_elements_by_xpath('//dl"]'):
    //assuming the dl have allways the same order,first time then clubs
    //first print the time and then the name
    if(litag.get_attribute(class)=="lsTime")
         time= litag.text
         print(time)
    if(litag.get_attribute(class)=="lsTNames"):
         clubs= litag2.text
         print(clubs)

只需检查从您正在使用的语言中获取属性和selenium元素的函数是什么。

答案 1 :(得分:0)

解决方案:

from pyvirtualdisplay import Display
from selenium import webdriver
import time

with Display():
    browser = webdriver.Firefox()
    try:
       browser.get(url_link_mob)
       time.sleep(2)
       for litag in browser.find_elements_by_xpath('//dl'):
           if litag.get_attribute("class") == "lsTime":
               match_time = litag.text
               print(match_time)
           if litag.get_attribute("class") == "lsTNames":
               teams = litag.text
               print(teams)

    finally:
        browser.quit()