#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(): возвращает текстовое содержимое элемента, включая текстовое содержимое его дочерних элементов, без разметки.
Комментарии:
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что бы вы ни хотели ввести ‘, ‘вот здорово’]