конкретные методы лечения в условиях с XPath - PullRequest
0 голосов
/ 07 мая 2019

Я хочу извлечь поле xpath и манипулировать им в зависимости от того, что содержится в поле, в этом случае я хочу, чтобы мой xpath обнаружил, содержит ли поле слово, и если он выполняет обработку X, в противном случае выполнить У лечения, а затем вставьте его в мой скрап-элемент

Я попытаюсь объяснить это в псевдокоде вместе с моим реальным кодом xpath

Я пытался использовать .extract (), манипулируя полем как строкой, а затем вставляя его в свой элемент, у меня было много разных проблем, и это был такой беспорядок

#my current code
new.add_xpath('source',"substring-before(.//h3/a/@href,'?')")
#what i wanna achieve
new.add_xpath('source',if .//h3/a/@href contains "profile.php" :
                          substring-before(.//h3/a/@href,'id')
                       else :
                          substring-before(.//h3/a/@href,'?'))   

id ожидает, что извлеченное поле будет либо ./XXX.XXX.?.XXX, если в нем есть profile.php, либо ./XXX.XXX, если оно не

1 Ответ

1 голос
/ 07 мая 2019

Я полагаю, вы используете XPath 1.0 из-за Python. Затем вы можете вывести непосредственно нужную строку с помощью этого выражения:

substring-before(
   .//h3/a/@href, 
   concat(
      substring(
         'id',
         1 div contains(.//h3/a/@href, 'profile.php')
      ), 
      substring(
         '?',
         1 div not(contains(.//h3/a/@href, 'profile.php'))
      )
   )
)

Тест в http://www.xpathtester.com/xpath/cca4e5a85df20137b923d0b6f06bf6cc

Обратите внимание : как и в C, логические значения приводятся к числам 0 (false()) и 1 (true()), тогда вы можете использовать расширенное представление вещественных чисел (NaN, Inf, -Inf) в качестве аргумента для функции substring() , как в примерах, приведенных в спецификации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...