Извлечение текста и узлов из с использованием lxml в том же индексе массива

#python #web-scraping #xpath #lxml

#python #очистка веб-страниц #xpath #lxml

Вопрос:

Привет, мне нужно получить весь текст и другие вещи внутри pharagrap что-то вроде этого:

 <div>
<p>
Whatever you want type <strong>here is great</strong>
</p>
<p>
Whatever you want type <strong>here is great</strong>
</p>
</div>
 

Я использую это, чтобы получить весь текст и строгий текст из фрагментов, но проблема в том, что при использовании этого способа текст и строгий текст обрабатываются путем разделения, затем я получаю массив, подобный этому [‘Все, что вы хотите, введите’,’вот здорово’], и мне нужно получить узлы втот же индекс массива, что-то вроде этого [‘Все, что вы хотите, введите здесь, это здорово’]

 content = html.xpath('.//p/text() | .//p/strong/text()')
 

Я нашел способ извлечь текст внутри них:

.text_content(): возвращает текстовое содержимое элемента, включая текстовое содержимое его дочерних элементов, без разметки.

https://lxml.de/lxmlhtml.html

Комментарии:

1. Попробуйте content = html.xpath('string(//p)')

2. нет, не работает

3. вы пробовали использовать BeautifulSoup ?

4. Мне нужно использовать xpath/lxml

5. Что вы подразумеваете под «не работает»?

Ответ №1:

Для этого вы могли бы использовать BeautifulSoup .

 from bs4 import BeautifulSoup

html_string = """<p>
 Whatever you want type <strong>here is great</strong>
</p>
    """

soup = BeautifulSoup(html_string, 'html.parser')
mytext = [soup.find('p').get_text().strip()]
#['Whatever you want type here is great']
 

Комментарии:

1. Я хочу использовать lxml/xpath

Ответ №2:

Попробуйте это, я тестировал это в scrapy

 import scrapy
html="""<p>
Whatever you want type <strong>here is great</strong>
</p>"""
data = scrapy.Selector(text=html)

data.xpath("//p//text()[1]").getall()
 

вывод

[‘Nчто бы вы ни хотели ввести ‘, ‘вот здорово’]