2012-07-18 5 views
2

다음은 셀렌이 내용을 읽는 데 매우 복잡한 것처럼 보이는 표 HTML 소스입니다. 누군가 셀렌을 사용하여이 데이터를 파이썬으로 읽는 것을 도와 줄 수 있습니까?셀레늄 파이썬을 사용하여 테이블 데이터를 읽는 방법?

<div class="general_table"> 
    <div class="general_s"> 
     <div class="general_text1">Name</div> 
     <div class="general_text2">Abhishek</div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Last Name</div> 
     <div class="general_text2">Kulkarni</div> 
    </div> 
    <div class="general_s"> 
     <div class="general_text1">Phone</div> 
     <div class="general_text2"> 13613123</div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Cell Phone</div> 
     <div class="general_text2">82928091</div> 
    </div>   
    <div class="general_s"> 
     <div class="general_text1">City</div> 
     <div class="general_text2"></div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Model</div> 
     <div class="general_text2"> DELL PERC H700</div> 
    </div> 
</div> 

답변

2

는 셀레늄 webdriver를 사용하여이 테이블을 읽을하려면, XPath는 쉬운 방법이 될 것 같다 -

I 코드가 잘못 될 수 있도록 적절하게 파이썬을 모르는거야 하지만 생각은 옳은 것 같습니다 -

general_table의 div 태그 수를 확인하려면 xpath -

를 사용하십시오.

driver.find_elements_by_xpath(("//*[@class='general_table']/div")크기 - 6 인 목록을 반환합니다.

그럼 할 수 있습니다 루프를 사용하여 각 요소를 통해 루프 -이 방법으로 테이블의 모든 태그를 읽을 수

for(int i=1;i<=list.length;i++){ 
    String text1 = driver.find_element_by_xpath("//*[@class='general_table']/div["+i+"]/div[1]").text; 
    String text2 = driver.find_element_by_xpath("//*[@class='general_table']/div["+i+"]/div[2]").text; 
} 

. 소스 사용 셀레늄을 얻는 것은 좋은 생각이 아니다하지만

+0

하리, 감사에 대한 이동합니다 .. 나를 위해 작동 이 솔루션은 당신을 위해 일한 경우 내 대답. –

+0

당신이 올바른으로이 응답을 표시 할 수있는 대답 하리의 솔루션 ... –

1

사용 셀레늄은 페이지 소스를 잡아합니다 (그래서 당신은 진짜 모든 JS/아약스 물건 후 콘텐츠를 얻을)를 구문 분석 BeautifulSoup 같은 뭔가를.

from bs4 import BeautifulSoup 

soup = BeautifulSoup("""<div class="general_table"> 
    <div class="general_s"> 
     <div class="general_text1">Name</div> 
     <div class="general_text2">Abhishek</div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Last Name</div> 
     <div class="general_text2">Kulkarni</div> 
    </div> 
    <div class="general_s"> 
     <div class="general_text1">Phone</div> 
     <div class="general_text2"> 13613123</div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Cell Phone</div> 
     <div class="general_text2">82928091</div> 
    </div>   
    <div class="general_s"> 
     <div class="general_text1">City</div> 
     <div class="general_text2"></div> 
    </div> 
    <div class="general_m"> 
     <div class="general_text1">Model</div> 
     <div class="general_text2"> DELL PERC H700</div> 
    </div> 
</div>""") 

def tags(iterable): 
    return filter(lambda x: not isinstance(x, basestring), iterable) 

for table in soup.find_all('div', {'class': 'general_table'}): 
    for line in tags(table.contents): 
     for i, column in enumerate(tags(line.contents)): 
      if column.string: 
       print column.string.strip(), 
      if i: 
       print ',', 
      else: 
       print ':', 
     print ''  

결과 :

Name : Abhishek , 
Last Name : Kulkarni , 
Phone : 13613123 , 
Cell Phone : 82928091 , 
City : 
Model : DELL PERC H700 , 
+0

감사 파울로,이 솔루션은 따라서 내가 똑딱에 의해 –

관련 문제