Подтвердить что ты не робот

Как я могу извлечь только текст в селекторе scrapy в python

У меня есть этот код

   site = hxs.select("//h1[@class='state']")
   log.msg(str(site[0].extract()),level=log.ERROR)

Вывод

 [scrapy] ERROR: <h1 class="state"><strong>
            1</strong>
            <span> job containing <strong>php</strong> in <strong>region</strong> paying  <strong>$30-40k per year</strong></span>
                </h1>

Можно ли получить текст без каких-либо тэгов html

4b9b3361

Ответ 1

//h1[@class='state']

в приведенном выше xpath вы выбираете тег h1, у которого есть атрибут class state

поэтому, чтобы выбрать все, что входит в h1 element

если вы просто хотите выбрать текст тега h1, все, что вам нужно сделать, это

//h1[@class='state']/text()

если вы хотите выбрать текст тега h1, а также его теги для детей, вы должны использовать

//h1[@class='state']//text()

поэтому различие /text() для конкретного текста тега и //text() для текста определенного тега, а также его дочерних тегов

приведенный ниже код работает для вас

site = ''.join(hxs.select("//h1[@class='state']/text()").extract()).strip()

Ответ 2

Вы можете использовать функцию BeautifulSoup get_text().

from bs4 import BeautifulSoup

text = '''
<td><a href="http://www.fakewebsite.com">Please can you strip me?</a>
<br/><a href="http://www.fakewebsite.com">I am waiting....</a>
</td>
'''
soup = BeautifulSoup(text)

print(soup.get_text())

Ответ 3

У меня нет экземпляра scrapy, поэтому я не мог проверить это; но вы можете попытаться использовать text() в своем выражении поиска.

Например:

site = hxs.select("//h1[@class='state']/text()")

(получил его из tutorial)

Ответ 4

Вы можете использовать BeautifulSoup для разметки тегов html, вот пример:

from BeautifulSoup import BeautifulSoup
''.join(BeautifulSoup(str(site[0].extract())).findAll(text=True))

Затем вы можете удалить все дополнительные пробелы, новые строки и т.д.

если вы не хотите использовать дополнительные модули, вы можете попробовать простое регулярное выражение:

# replace html tags with ' '
text = re.sub(r'<[^>]*?>', ' ', str(site[0].extract()))

Ответ 5

Вы можете использовать html2text

import html2text
converter = html2text.HTML2Text()
print converter.handle("<div>Please!!!<span>remove me</span></div>")