2015-10-30 36 views
-1

我想凑下页(只是第1页为这个问题的目的):Python的硒刮隐藏数据

https://www.sportstats.ca/display-results.xhtml?raceid=4886

我可以用Selinium抢则源解析它,但并非所有我要查找的数据都在源代码中。有些需要通过点击元素来找到。

例如,对于第一个人我可以从源中获取所有可见字段。但是,如果你点击+,那么我想要更多的数据。例如,“筹码时间”(01:15:29.9),以及点击某个人的+后右侧弹出的城市(奥克维尔)。

我不知道如何识别需要点击的元素来扩展+,然后即使点击它后,我不知道如何找到我正在查找的值。

任何提示将是伟大的。

+0

你试过了什么,结果是什么?正如你在学校所做的那样,请展示你的工作。 :)这是在SO上获得问题的过程中的一部分。这对你很有帮助,因为它会迫使你调查自己的问题并思考问题。这也向读者证明你做了功课,并做出了合理的尝试来回答你自己的问题。第三,它可以帮助读者找到和诊断问题,为您提供更好的答案,减少浪费时间。 – JeffC

+0

尝试在Selenium中使用''$(“。ui-row-toggler.ui-icon.ui-icon-circle-triangle-e”)。click()''来获得所有''+''按钮的点击。然后,您可以像过去一样分析生成的页面。 – kxxoling

回答

0

以下是您的要求的示例代码。此代码基于python,selenium和crome exe文件。

  from selenium import webdriver 
      from lxml.html import tostring,fromstring 
      import time 
      import csv 

      myfile = open('demo_detail.csv', 'wb') 
      wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
      driver=webdriver.Chrome('./chromedriver.exe') 
      csv_heading=["","","BIB","NAME","CATEGORY","RANK","GENDER PLACE","CAT. PLACE","GUN TIME","SPLIT NAME","SPLIT DISTANCE","SPLIT TIME","PACE","DISTANCE","RACE TIME","OVERALL (/814)","GENDER (/431)","CATEGORY (/38)","TIME OF DAY"] 
      wr.writerow(csv_heading) 
      count=0 
      try: 
       url="https://www.sportstats.ca/display-results.xhtml?raceid=4886" 
       driver.get(url) 
       table_tr=driver.find_elements_by_xpath("//table[@class='results overview-result']/tbody/tr[@role='row']") 
       for tr in table_tr: 
        lst=[] 
        count=count+1 
        table_td=tr.find_elements_by_tag_name("td") 
        for td in table_td: 
         lst.append(td.text) 

        table_td[1].find_element_by_tag_name("div").click() 
        time.sleep(5) 
        table=driver.find_elements_by_xpath("//div[@class='ui-datatable ui-widget']") 
        for demo_tr in driver.find_elements_by_xpath("//tr[@class='ui-expanded-row-content ui-widget-content view-details']/td/div/div/table/tbody/tr"): 
         for demo_td in demo_tr.find_elements_by_tag_name("td"): 
          lst.append(demo_td.text) 
        wr.writerow(lst) 
        table_td[1].find_element_by_tag_name("div").click() 
        time.sleep(5) 
        print count 
       time.sleep(5) 
       driver.quit() 
      except Exception as e: 
       print e 
       driver.quit()