2016-05-02 3 views
1

Я хочу извлечь данные с помощью xpath с помощью scrapy. Это мой код:Двойной выбор из scrap scrap

def parse(self, response): 
     Coords = [] 
     for sel in response.xpath('//*[@id="pitch"]/image[contains(@class,"success")]'): 
      item = PogbaItem() 
      item['x'] = sel.xpath('@x').extract() 
      item['y'] = sel.xpath('@y').extract() 
      item['x'] = sel.xpath('@x1').extract() 
      item['y'] = sel.xpath('@y1').extract() 
      Coords.append(item) 
     return Coords 

Проблема заключается в том, что HTML содержит два различных элемента: первый (image) с атрибутами x,y, а другой (line) с атрибутами x1,y1. Я пытаюсь взять и собрать их вместе, чтобы иметь окончательный csv, но я не могу найти правильный xpath. Как я могу это решить?

Update: два примера HTML:

<image class="pitch-object timer-1-40 success" x="331.172" y="84.678" width="30" height="30" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/sites/fourfourtwo.com/modules/custom/statzone/files/icons/successful_clearance.png"></image> 

<line class="pitch-object timer-2-84 success" marker-end="url(#smallblue)" x1="453.076" y1="199.169" x2="509.104" y2="216.676" style="stroke:blue;stroke-width:3"></line> 

ответ

1

Из того, что я понимаю, вы хотите взять в качестве x значения x атрибут, если он существует и x1 иначе, и так же, как хорошо y. Вот как я бы решить, что:

item['x'] = sel.xpath('@x').extract_first() or sel.xpath('@x1').extract_first() 
item['y'] = sel.xpath('@y').extract_first() or sel.xpath('@y1').extract_first() 

Или, вы можете иметь чистое решение XPath:

item['x'] = sel.xpath('(@x|@x1)').extract_first() 
item['y'] = sel.xpath('(@y|@y1)').extract_first() 

И, так как вам нужно обрабатывать как line и image элементы, вы должны настроить ваш главный выражение для обработки, что:

//*[@id="pitch"]/*[contains(@class,"success")] 

Или:

//*[@id="pitch"]/*[(self::image or self::line) and contains(@class,"success")] 
+0

Извините, я ошибся с элементами html. Я только что обновил свой ответ – slash89mf

+0

@ slash89mf в порядке, см. Обновление. Помогает ли это? – alecxe

+0

Это замечательно! Спасибо! – slash89mf

Смежные вопросы