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