2015-12-08 1 views
0

Для кода ниже мне нужно получить даты и их время + hrefs + formats + ... (не показаны) соответственно.Нет вложенных узлов. Как получить один кусок информации, а затем получить дополнительную информацию соответственно?

<div class="showtimes"> 
    <h2>The Little Prince</h2> 

    <div class="poster" data-poster-url="http://www.test.com"> 
     <img src="http://www.test.com"> 
    </div> 

    <div class="showstimes"> 

     <div class="date">9 December, Wednesday</div> 
     <span class="show-time techno-3d"> 
      <a href="http://www.test.com" class="link">12:30</a> 
      <span class="show-format">3D</span> 
     </span> 

     <span class="show-time techno-3d"> 
      <a href="http://www.test.com" class="link">15:30</a> 
      <span class="show-format">3D</span> 
     </span> 

     <span class="show-time techno-3d"> 
      <a href="http://www.test.com" class="link">18:30</a> 
      <span class="show-format">3D</span> 
     </span> 


     <div class="date">10 December, Thursday</div> 
     <span class="show-time techno-2d"> 
      <a href="http://www.test.com" class="link">12:30</a> 
      <span class="show-format">2D</span>   
     </span> 

     <span class="show-time techno-3d"> 
      <a href="http://www.test.com" class="link">15:30</a> 
      <span class="show-format">3D</span> 
     </span> 
    </div> 
</div> 

Для этого я использую этот код (python).

Чтобы получать даты, это не проблема, но у меня есть проблема с тем, как получить информацию о отдыхе для определенной даты соответственно. Пробовал много разных способов - не повезло (в комментариях некоторые из них). Я не могу найти способ, как иметь дело с случаем, когда узлы, которые мне нужны, под другим (на одном уровне?). В этом случае:

-> div Date1 
-> span Time1 
-> span href1 
-> span Format1 

-> span Time2 
-> span href2 
-> span Format2 

-> span Time3 
-> span href3 
-> span Format3 

-> div Date2 
-> span Time1 
-> span href1 
-> span Format1 
# etc etc 

ответ

0

Оказывается, что поддержка lxml ссылки переменного питона из выражения XPath, которые доказали свою полезность для этого случая, т.е. для каждого div date, вы можете получить следующие двойники span которых ближайший предшествующие двойники div date является ток div date, где ссылка на текущий div date является хранится в переменной питонаdates:

for dates in movie.xpath('.//div[@class="showstimes"]/div[@class="date"]'): 
    date = dates.xpath('normalize-space()') 
    for times in dates.xpath('following-sibling::span[preceding-sibling::div[1]=$current]', current=dates): 
     time = times.xpath('a/text()')[0] 
     url = times.xpath('a/@href')[0] 
     format_type = times.xpath('span/text()')[0] 
     print date, time, url, format_type 

выход:

'9 December, Wednesday', '12:30', 'http://www.test.com', '3D' 
'9 December, Wednesday', '15:30', 'http://www.test.com', '3D' 
'9 December, Wednesday', '18:30', 'http://www.test.com', '3D' 
'10 December, Thursday', '12:30', 'http://www.test.com', '2D' 
'10 December, Thursday', '15:30', 'http://www.test.com', '3D' 

Ссылки:

+0

Не знал о переменной функции в LXML. Благодаря! – TitanFighter

+0

Мне тоже не повезло узнать об этом. И ты желанный :) – har07