Как я могу извлечь только текст в селекторе 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
Ответы
Ответ 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>")