Scrapy Xpath Selector возвращает частичный текст

У меня есть текст в p тег, который может содержать дополнительные теги, например emвнутри этого. Когда я передаю следующий текстparsel XPath селектор и спросите первый p тег он возвращает мне частичную строку.

  from parsel import Selector

  selector = Selector(text="<div><p>Hel<em>l</em>o</p><p>World!</p></div>")

  for p in selector.xpath('(//div//p//extract())[1]'):
    print(p.get())

Результат, возвращаемый кодом:

Hel и ожидаемый результат hello, что я здесь делаю не так.

1 ответ

Я думаю, вы ищете что-то вроде этого:

from parsel import Selector

selector = Selector(text="<div><p>Hel<em>l</em>o</p><p>World!</p></div>")

for p in selector.xpath('//div/p[1]/descendant-or-self::*/text()'):
  print(p.get())

# OR
print("".join([x.get() for x in selector.xpath('//div/p[1]/descendant-or-self::*/text()')]))

В зависимости от того, чего вы пытаетесь достичь, вам может потребоваться избежать двойных косых черт в вашем xpath. См. Раздел Работа с относительными XPath

Другие вопросы по тегам