нужна помощь - PullRequest
       12

нужна помощь

0 голосов
/ 10 ноября 2011

Я новичок в xpath, поэтому, пожалуйста, потерпите меня. В настоящее время я пытаюсь использовать scrapy для удаления содержимого с некоторых веб-страниц, и содержимое выглядит примерно так:

     <td colspan="3" valign="top" class="regular">Landsize: 84,000sq with an extensive shoreline 750m<br />
<br />
Call Or Email for more info<br />

. Full-length Olympicpool,children pool,jacuzzi<br />
\' Landscapesdkey bridges<br />
. 2 tennis courts<br />
. water features True seafront development with iconic design by architect Daniel Libeskind<br />
lconic residential, located less than\' 150 metres from the shoreline<br />
<br />
opposite the future integrated resort on sentosa Island.<br />

A part of keppel Bay world calss water front precinct with luxury homes.<br />
<br />
Call or email for more info </td>

В частности, я использую следующее hxs.select('//tr[contains(td,"Description")]/following-sibling::tr[1]/td/text()').extract()

Однако выполнение этого приведет к тому, что результирующий элемент будет разбит на список из-за того, что содержимое разделено <br>. Если я исключу text() из xpath, в результирующую строку будет включен элемент <td>, что нежелательно.

Есть ли способ в xpath, чтобы убедиться, что моя полученная строка - это все, что показано выше, но без тегов td? Я надеюсь, что мне не нужно вручную присоединяться к списку по <br/>

Ответы [ 3 ]

3 голосов
/ 11 ноября 2011

Судя по вашему комментарию к правильному ответу Эвана, вы хотите пропустить NL .

В этом случае попробуйте:

normalize-space(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)

Примечание

  1. Если аргумент normalize-space() выбирает более одного узла, эта функция вернет результат обработки только первого выбранного узла.

  2. Все начальные и конечные пробельные символы удаляются. Все промежуточные группы смежных пробелов заменяются одним пробелом.

0 голосов
/ 10 ноября 2011

Возможно, вы найдете HTML Agility Pack , полезный для анализа веб-страниц.

0 голосов
/ 10 ноября 2011

Попробуйте обернуть ваше выражение в вызов метода string (), который возвращает строковое значение узла, которое является объединением всех строковых значений нисходящих текстовых узлов узла.

string(//tr[contains(td,"Description")]/following-sibling::tr[1]/td)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...