Включая текст с тегами <strong>и <em>при просмотре html с использованием lxml & запросов? - PullRequest
0 голосов
/ 21 апреля 2019

Я собираю текст с веб-страницы, используя lxml и запросы.Весь текст, который я хочу, находится под <p> тегами.Когда я использую contents = tree.xpath('//*[@id="storytext"]/p/text()'), contents включает только текст, который не входит в теги <em> или <strong>.Но когда я использую contents = tree.xpath('//*[@id="storytext"]/p/text() | //*[@id="storytext"]/p/strong/text() | //*[@id="storytext"]/p/em/text()'), текст на вкладках <em> и <strong> отделяется от остального текста в этом теге <p>.

Я хотел бы:

  1. очистить каждый <p> как единое целое, включая весь его текст (будь то простой или <em> или <strong>), и

  2. сохранить <em> и <strong> теги, чтобы их можно было использовать позже для форматирования выделенного текста.

Пример html: <div id="storytext"><p>"Go <em>away!</em>" His voice was drowned out by the mixer. She didn't even <em>hear</em> him. He could scrub it all day, probably, and Esti would just say <em>can't you do anything</em>? He scowled fiercely at the dirt.</p></div>

Желаемый выход: "Go <em>away!</em>" His voice was drowned out by the mixer. She didn't even <em>hear</em> him. He could scrub it all day, probably, and Esti would just say <em>can't you do anything</em>? He scowled fiercely at the dirt.

1 Ответ

0 голосов
/ 21 апреля 2019

Если только те, кто находится между вами, могут использовать bs4 и replace для удаления тегов p open и close

from bs4 import BeautifulSoup as bs

html = '''
<div id="storytext"><p>"Go <em>away!</em>" His voice was drowned out by the mixer. She didn't even <em>hear</em> him. He could scrub it all day, probably, and Esti would just say <em>can't you do anything</em>? He scowled fiercely at the dirt.</p></div>
'''

soup = bs(html,'lxml')

for item in soup.select('p'):
    print(str(item).replace('<p>','').replace('</p>',''))

Использование requests для получения html

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('url')
soup = bs(r.content, 'lxml')
for item in soup.select('p'):
    print(str(item).replace('<p>','').replace('</p>',''))
...