Используя функцию string () Xpath, как игнорировать указанные теги c? - PullRequest
2 голосов
/ 09 февраля 2020

Я использую селектор Scrapy, и у меня есть HTML, например:

<p class="TweetTextSize TweetTextSize--normal js-tweet-text tweet-text" lang="pt" data-aria-label-part="0">O
    <a href="/MInfraestrutura" class="twitter-atreply pretty-link js-nav" dir="ltr" data-mentioned-user-id="523331076">
        <s>@</s><b>MInfraestrutura</b></a> <a href="/tarcisiogdf" class="twitter-atreply pretty-link js-nav" dir="ltr"
        data-mentioned-user-id="1078618844007157761"><s>@</s><b>tarcisiogdf</b></a> prevê investimentos de R$ 30 bilhões
    para ampliar a malha ferroviária do país nos próximos 6 anos. Estudo de 2018 da Fundação Dom Cabral, a malha
    rodoviária é utilizada para o escoamento de 75% da produção no país. As ferrovias respondem por 5,4%.
    <a href="https://twitter.com/jairbolsonaro/status/1226108292482682881" 
        class="twitter-timeline-link u-hidden" 
        data-pre-embedded="true"
        dir="ltr">pic.twitter.com/wa8X7gvOOc
    </a>
</p>

И я хочу go углубиться в каждый тег и извлечь его тексты, игнорируя тексты внутри якорей с помощью класс "твиттер-тайм-линк у-скрытый". Поэтому я хочу игнорировать следующий текст: pic.twitter.com/wa8X7gvOOc

Что я пробовал:

node.xpath('//*[not(self::a[@class="twitter-timeline-link u-hidden"])]').xpath('string()').get()

Результат:

'O @MInfraestrutura @tarcisiogdf prevê investimentos de R$ 30 bilhões para ampliar a malha ferroviária do país nos próximos 6 anos. Estudo de 2018 da Fundação Dom Cabral, a malha rodoviária é utilizada para o escoamento de 75% da produção no país. As ferrovias respondem por 5,4%.pic.twitter.com/wa8X7gvOOc'

Ожидаемое:

'O @MInfraestrutura @tarcisiogdf prevê investimentos de R$ 30 bilhões para ampliar a malha ferroviária do país nos próximos 6 anos. Estudo de 2018 da Fundação Dom Cabral, a malha rodoviária é utilizada para o escoamento de 75% da produção no país. As ferrovias respondem por 5,4%.'

Кто-нибудь знает, как игнорировать теги с помощью функции string(). Или каким-либо другим способом исключить якоря с указанными c тегами внутри некоторого узла?.

Спасибо

1 Ответ

1 голос
/ 10 февраля 2020

Попробуйте изменить его на:

node.xpath('//*[not(self::a[@class="twitter-timeline-link u-hidden"])]/text()').extract()

Это должно дать вам вывод без pic.twitter.com/wa8X7gvOOc.

...