Например, html block:
<p><b>text1</b> (<span><a href="#1">asdf</a>text2</span>)</p>
Мне нужно выбрать все теги «a», а все остальное должно быть простым текстом, как мы видим в браузере:
result = ["text1", " (", <tag_a>, "text2", ")"]
или что-то в этом роде.
Пробовал:
hxs.select('.//a|text()')
, в этом случае он находит все теги "a", но текст возвращается только от прямых потомков.
Вв то же время:
hxs.select('.//text()|a')
получает все тексты, но теги "a" только от прямых потомков.
UPDATE
elements = []
for i in hxs.select('.//node()'):
try:
tag_name = i.select('name()').extract()[0]
except TypeError:
tag_name = '_text'
if tag_name == 'a':
elements.append(i)
elif tag_name == '_text':
elements.append(i.extract())
isесть лучший способ?