XPATH - / a / text (), не могу извлечь адрес электронной почты (текст) - PullRequest
0 голосов
/ 04 июня 2018

У меня есть простой HTML-файл с именами пользователей и ссылками на их подстраницы:

<a href="/user/someUserName@domain.com">someUserName@domain.com</a>
<a href="/user/someUserName">someUserName</a>

Я использую

xpath('.//a/text()').extract_first()

для извлечения имени пользователя в виде обычного текста.

У меня проблема, когда пользователь указывает имя пользователя в форме электронного письма (см. Первый пример) - в таком случае возвращается пустой объект.

Редактировать: я только что заметил, что html недавно изменился, и я не перепроверил: <td><a href="/user/someUserName@domain.com"><span class="__cf_email__" data-cfemail="3f4d565c544c5e514bwer4rwre58525e5653115c5052">[email&#160;protected]</span></a></td>

Я извлеку из @ href.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Получение дочерних элементов текстового узла (используя text()), как правило, не рекомендуется, именно по причинам, продемонстрированным здесь.С <a>content</a> вы получите «контент», с <a><span>content</span><a> вы ничего не получите, с <a>h<sub>2</sub>o</a> вы получите два текстовых узла, «h» и «o».

Используйте string () длявместо этого получите строковое значение.Строковое значение содержит объединенное содержимое всех текстовых узлов-потомков на любой глубине.(«content», «content» и «h2o» в этих трех примерах).

Единственная оговорка в том, что я не знаю Scrapy API, поэтому я не знаю, как он обрабатывает выражения XPath, которые возвращаютстроки, а не узлы.

0 голосов
/ 04 июня 2018

Я использовал следующий код: -

import scrapy

inputString = '''<xmlData> 
                 <a href="/user/someUserName@domain.com">someUserName@domain.com</a>
                 <a href="/user/someUserName">someUserName</a>
                 </xmlData>'''

print scrapy.selector.Selector(text=inputString).xpath('.//a/text()').extract_first()

Вывод: -

someUserName@domain.com

Можете ли вы вставить полный код Python?Потому что код xpath работает нормально: -

scrapy.selector.Selector(text=inputString).xpath('.//a/text()').extract_first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...