2016-05-22 3 views
-2

У меня есть список этих <TD> и я использую список, чтобы получить их все сразу. Если вы хотите извлечь текст «v 11/4» в обоих случаях, то есть с/без sup Должно быть выделено в один элемент (для этой строки).XPATH (еще раз) дополнительный элемент тега элемент один строка

экс 1

<td> 
<b class="black">2</b>/6 <a href="/some/link"onclick= 
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
11)</a>v 11/4</td> 

экс 2

<td> 
<b class="black">2</b>/6 <a href="/some/link"onclick= 
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
11)</a>v<sup>1</sup> 11/4</td> 

Любые идеи?

+0

Что вы используете для выполнения XPath, 'lxml', Scrapy, селен, что-то еще? – har07

+0

scrapy - проблема решена – codervince

+0

легко для пользователей anon и отметьте сообщения вниз. Пойдем, покажи свои лица. – codervince

ответ

1

Один из возможных способов идентификации текста «V 11/4», который соответствует для обоих <td> примеров будет «конкатенация всех прямых дочерних текстовых узлов (в <td>), которые расположены после <a>». Ниже пример реализации с использованием lxml.html:

>>> from lxml import html 
>>> raw = '''<tr> 
... <td> 
... <b class="black">2</b>/6 <a href="/some/link" onclick= 
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
... 11)</a>v 11/4</td> 
... <td> 
... <b class="black">2</b>/6 <a href="/some/link" onclick= 
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS 
... 11)</a>v<sup>1</sup> 11/4</td> 
... </tr>''' 
... 
>>> root = html.fromstring(raw) 
>>> result = [''.join(txt for txt in td.xpath("a/following-sibling::text()")).strip() \ 
...    for td in root.xpath("//td")] 
... 
>>> result 
['v 11/4', 'v 11/4'] 
+0

только то, что я искал благодаря – codervince

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