Могу ли я посмотреть на фактическую строку, которая была источником элемента, проанализированного из HTML-документа с использованием lxml - PullRequest
2 голосов
/ 21 августа 2010

Мне было весело манипулировать html с помощью lxml.Теперь я хочу сделать некоторые манипуляции с реальным файлом, после нахождения конкретного элемента, который соответствует моим потребностям, я хочу знать, возможно ли получить источник элемента.

Я прыгал вверх и вниз в моемПредседатель, увидев исходную линию как метод моего элемента, но это не дало мне того, что я хотел.

some_element.sourceline

Насколько я понимаю, исходную линию можно использовать только тогда, когда источником htm является файл списков, поэтомуВы получите номер строки.

Лучше добавить, что я сгенерировал свои элементы с помощью

theTree=html.fromstring(open(myFileRef).read())

the_elements=[e  for e in theTree.iter()]

Чтобы было ясно, я получаю значение None как значение для some_element.sourceline - я протестировал это для всех 27 000 элементов в моем дереве

Одна вещь, которую я себе представляю, - это использовать источник html в выражении, чтобы найти это конкретное место в документе, возможно, чтобы что-то вырезать.Я не могу полагаться на текст элемента, потому что текст не обязательно уникален.

Одним из решений, которое было опубликовано, но снято, было использование исходной строки, но даже после прочтения моего файла в виде списка я не смог получить никакого значения, кроме None, для исходной строки.Я собираюсь опубликовать еще один вопрос, чтобы узнать, есть ли у кого-нибудь пример, использующий исходную строку

. Я только что попробовал и отбросил html.tostring (myelement), поскольку он автоматически конвертирует хотя бы некоторые кодировки (вероятно, я не правильно формулирую это)Вот пример:

Отрывок html-источника

<b>  KEY 1A.&nbsp;&nbsp;&nbsp;&nbsp;REGIONAL PRODUCTION    <br>    </b>

html.tostring(the_element,method='html')

Очевидно, я не получаю исходный, неукрашенный источник.

'<b>  KEY 1A.&#160;&#160;&#160;&#160;REGIONAL PRODUCTION    <br></b>'

1 Ответ

3 голосов
/ 17 сентября 2013

Я думаю, что нашел проблему, так как у меня была такая же проблема.

Я считаю, что element.sourceline будет потеряно, если вы выполните какое-либо преобразование xslt в документ при его анализе.

Когда я не преобразовываю документ, я получаю исходную строку нормально, однако, когда я использую etree.XSLT, я теряю все исходные данные.

...